Jump to content

Mark-

Members
  • Content Count

    208
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Mark-


  1. 6 hours ago, PeterPanettone said:

    I don't sell anything. Please don't insinuate anything here if I was a drug dealer. If you don't want to pay a small fee for other people's hard work you can write the code yourself.

    I am NOT affiliated with SVGMagic.

    While the opensource idea is a good concept for social collaboration,  the misconception that EVERYTHING must be free is a pathological social delusion.

    #1 You need to get a grip.

    #2 I insinuated nothing. Your "drug dealer" rant springs from your own mind. 

    #3 I see you edited the original post to say you are not affiliated with the product.

    #4 I never said anything about free. Where you jumped to ""EVERYTHING" must be free..." is mind boggling. 

    #5 You need to get a grip.

     

    @Lars That said - $299 for 8 licenses with source code is not over the top for what appears to be a capable piece of code.

     

    I thought the same but the page said "includes source code repository access" and while I understand all the words the phrase gives me pause. "Source code included" is the standard phrase, concise and non ambiguous.

     

    Good luck.

     


  2. OK, here is how.

     

    This program was started 13 years ago. Still going strong. 😉

     

    Using the current version of ICS.

    I have 40+ old/still using forms/DMs with TWSocket on them, created years ago.

    All these DFMs had 1 the for the low and high property. I did not change/set/alter the ReqVerHigh or ReqVerLow properties.

    No, problem all works and has been for years.

    In the previous two months an THttpCli was added and it is called/loaded/used first in the program.

    It is dynamically created and the default for the CtrlSocket(TWSocket) is indeed 2 as you stated.

     

    Now, the program starts, Winsock 2 is used by the THttpCli, one of the old DFMs is used/loaded and kaboom.

     

    > ReqVerHigh or ReqVerLow would only be saved in the DFM if you changed them from the default of 2,

     

    ReqVerHigh = 1 and ReqVerLow = 1 was in all the DFMs that had a TWSocket. I grepped and replaced them all with 2 and problem solved.

     

    Perhaps I should remove them all and let the current version default value apply.

     

     


  3. OK I found the error.

    We added some code, earlier in program execution, nothing to do with the TWSocket generating the error, using THttpCli. It is initialized first and CtrlSocket.ReqVerLow and CtrlSocket.ReqVerHigh are indeed set to 2.

     

    Now creating the TWSocket port, when the form opens using 1, as was streamed with the form, causes the crash.

    So we change all the TWSockets to 2 or set the THttpCli to 1.


  4. 18 minutes ago, David Heffernan said:

    If you don't like the terms, don't buy the product. We all have a right to set the terms of any products that we sell. 

    Dude, I was giving potential customer feedback. Not telling him he MUST do something or preventing him from selling how he wants to sell or infringing on his "rights". SMH


  5. > Yes, I can't keep developing the package without some income.

     

    No, I am purchasing a product (as is), not funding your future work.

     

    > But if you had read a bit further it says:

     

    I read the complete page.

    Why should I be forced to take steps to end a subscription I did not want?

    Why not have a checkbox, when ordering, to provide for a subscription verse forcing a subscription?


  6. Hello,

     

    I tried using the driver with MySQL (8.0) a couple of months ago and had to add the dll to the connection parameters to get it to work, partially. After added, I was able to get it to connect but could not get other actions to succeed. I traced the error into an FD function and posted on the EMB forums with no joy. I switched to using ODBC for MySQL 8.0 and all is working. 

     

    Good luck,

     

    Mark

     

     


  7. Hello,

     

    Quote

    Your file encoding is wrong.

    Make sure that it's ANSI or UTF8 without BOM - or even better use the Win SDK RC compiler (set this in the project options).

    Bingo. Thank you.

     

    Quote

    or even better use the Win SDK RC compiler (set this in the project options).

    OK, is that a better resource compiler?

     

    Quote

    I can't see your rc file. Can you include it.

    It only had the string table as shown above. The file encoding was the issue.

     

    Everyone, thanks for the help.

     

    Mark

     


  8. Hello,

     

    Thanks timfrost for the response.

    Quote

    What happens if you compile an RC file containing:

    I copied/pasted the example code into the RC file, complied (Shift F9) and got the same error message.

    Quote

    It would be helpful if you could say what you propose to use the resource file for. 

    Perhaps string table or RCDATA, I have not decided. At this point I am just trying to get anything to compile.

     

    Mark


  9. Hello,

     

    Delphi 10.2

    I am trying to compile an RC file included with the project.

    {$R 'ResStr.res' 'ResStr.rc'}

    Regardless of what I put in the RC file I get [on the first line]:

    [BRCC32 Error] ResStr.rc(1): Fatal error Expecting resource name or resource type name

    Ideas or anyone have a sample RC file that complies without error?

     

    Thanks,

     

    Mark

     


  10. 7 minutes ago, Arnaud Bouchez said:

    Why not get the BIOS description string? 

    The kind of Virtual machine is clearly available there.

     

    Thanks for the response.

    Why do you think/know those registry values cannot be changed without causing a failure of the the guest OS or host program?


  11. Hello,

     

    Has anyone converted this unit to work on 64 bit and 32 bit?

     

    Thanks,

     

    Mark

    unit uDGVMUtils;
    
    interface
    
    (*******************************************************************************
    
      uDGVMUtils -- is an attempt to create one of the best virtual machine
        detector methods, feel free to contribute in any way you wish.
    
      Version 1.1, 2010-01-15
    
      Copyright© you are free to use it for comercial, private or both purposes
    
      Contributors:
        Dorin Duminica
        Chee Meng
    
    *******************************************************************************)
    
    type
      TVMWareVersion = (
        vvExpress = 1,
        vvESX,
        vvGSX,
        vvWorkstation,
        vvUnknown,
        vvNative);
    
    const
      VMWARE_VERSION_STRINGS: array [TVMWareVersion] of string = (
        'Express',
        'ESX',
        'GSX',
        'Workstation',
        'Unknown',
        'Native');
    
    type
      TVirtualMachineType = (
        vmNative,
        vmVMWare,
        vmWine,
        vmVirtualPC,
        vmVirtualBox);
    
    const
      VIRTUALMACHINE_STRINGS: array[TVirtualMachineType] of string = (
        'Native',
        'VMWare',
        'Wine',
        'Virtual PC',
        'Virtual Box');
    
    function IsRunningVMWare(var AVMWareVersion: TVMWareVersion): Boolean; overload;
    function IsRunningVMWare: Boolean; overload;
    function IsRunningWine(var AWineVersion: string): Boolean; overload;
    function IsRunningWine: Boolean; overload;
    function IsRunningVirtualPC: Boolean;
    function IsRunningVBox: Boolean;
    function IsRunningVM(var AVMVersion: string): Boolean; overload;
    function IsRunningVM: Boolean; overload;
    implementation
    
    uses SysUtils,Windows,Vcl.Dialogs;
    
    function IsRunningVMWare(var AVMWareVersion: TVMWareVersion): Boolean;
    const
      CVMWARE_FLAG = $564D5868;
    var
      LFlag: Cardinal;
      LVersion: Cardinal;
    begin
      LFlag := 0;
      try
        asm
          push eax
          push ebx
          push ecx
          push edx
    
          mov eax, 'VMXh'
          mov ecx, 0Ah
          mov dx, 'VX'
    
          in eax, dx
    
          mov LFlag, ebx
          mov LVersion, ecx
    
          pop edx
          pop ecx
          pop ebx
          pop eax
        end;
      except
    //  uncomment next two lines if you wish to see exception
    //    on E: Exception do
    //      ShowMessage(E.message);
      end; // trye
      if LFlag = CVMWARE_FLAG then begin
        Result := True;
        case LVersion of
          1: AVMWareVersion := vvExpress;
          2: AVMWareVersion := vvESX;
          3: AVMWareVersion := vvGSX;
          4: AVMWareVersion := vvWorkstation;
          else
            AVMWareVersion := vvUnknown;
        end
      end else begin
        Result := False;
        AVMWareVersion := vvNative;
      end; // if LFlag = CVMWARE_FLAG then begin
    end;
    
    function IsRunningVMWare: Boolean;
    var
      LVMWareVersion: TVMWareVersion;
    begin
      Result := IsRunningVMWare(LVMWareVersion);
    end;
    
    function IsRunningWine(var AWineVersion: string): Boolean;
    type
      TWineGetVersion = function: PAnsiChar;{$IFDEF Win32}stdcall;{$ENDIF}
      TWineNTToUnixFileName = procedure (P1: Pointer; P2: Pointer);{$IFDEF Win32}stdcall;{$ENDIF}
    var
      LHandle: THandle;
      LWineGetVersion: TWineGetVersion;
      LWineNTToUnixFileName: TWineNTToUnixFileName;
    begin
      Result := False;
      AWineVersion := 'Unknown';
      LHandle := LoadLibrary('ntdll.dll');
      if LHandle > 32 then begin
        LWineGetVersion := GetProcAddress(LHandle, 'wine_get_version');
        LWineNTToUnixFileName := GetProcAddress(LHandle, 'wine_nt_to_unix_file_name');
        if Assigned(LWineGetVersion) or Assigned(LWineNTToUnixFileName) then begin
          Result := True;
          if Assigned(LWineGetVersion) then
            AWineVersion := ANSIString(LWineGetVersion);
    //        AWineVersion := StrPas(LWineGetVersion);
        end; // if Assigned(LWineGetVersion) or ...
        FreeLibrary(LHandle);
      end; // if LHandle > 32 then begin
    end;
    
    function IsRunningWine: Boolean;
    var
      LWineVersion: string;
    begin
      Result := IsRunningWine(LWineVersion);
    end;
    
    function IsRunningVirtualPC: Boolean;
     asm
      push ebp;
      mov ebp, esp;
    
      mov ecx, offset @exception_handler;
    
      push ebx;
      push ecx;
    
      push dword ptr fs:[0];
      mov dword ptr fs:[0], esp;
    
      mov ebx, 0; // Flag
      mov eax, 1; // VPC function number
    
    //   call VPC
      db $0F, $3F, $07, $0B
    
      mov eax, dword ptr ss:[esp];
      mov dword ptr fs:[0], eax;
    
      add esp, 8;
    
      test ebx, ebx;
    
      setz al;
    
      lea esp, dword ptr ss:[ebp-4];
      mov ebx, dword ptr ss:[esp];
      mov ebp, dword ptr ss:[esp+4];
    
      add esp, 8;
    
      jmp @ret1;
    
      @exception_handler:
      mov ecx, [esp+0Ch];
      mov dword ptr [ecx+0A4h], -1; // EBX = -1 ->; not running, ebx = 0 -> running
      add dword ptr [ecx+0B8h], 4; // ->; skip past the call to VPC
      xor eax, eax; // exception is handled
    
      @ret1:
    end;
    
    function IsRunningVBox: Boolean;
    
      function Test1: Boolean;
      var
        LHandle: Cardinal;
      begin
        Result := False;
        try
          LHandle := LoadLibrary('VBoxHook.dll');
          Result := (LHandle <> 0);
          if Result then
            FreeLibrary(LHandle);
        except
        end; // trye
      end; // function Test1: Boolean;
    
      function Test2: Boolean;
      var
        LHandle: Cardinal;
      begin
        Result := False;
        try
          LHandle := CreateFile(
            '\\\\.\\\VBoxMiniRdrDN',
            GENERIC_READ,
            FILE_SHARE_READ,
            NIL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            0);
          Result := (LHandle <> INVALID_HANDLE_VALUE);
          if Result then
            CloseHandle(LHandle);
        except
        end; // trye
      end; // function Test2: Boolean;
    
    begin
      Result := Test1 or Test2;
    end;
    
    function IsRunningVM(var AVMVersion: string): Boolean;
    begin
      AVMVersion := VIRTUALMACHINE_STRINGS[vmNative];
      Result := True;
      if IsRunningWine then
        AVMVersion := VIRTUALMACHINE_STRINGS[vmWine]
      else
        if IsRunningVMWare then
          AVMVersion := VIRTUALMACHINE_STRINGS[vmVMWare]
        else
          if IsRunningVirtualPC then
            AVMVersion := VIRTUALMACHINE_STRINGS[vmWine]
          else
            if IsRunningVBox then
              AVMVersion := VIRTUALMACHINE_STRINGS[vmVirtualBox]
            else begin
              AVMVersion := VIRTUALMACHINE_STRINGS[vmNative];
              Result := False;
            end;
    end;
    
    function IsRunningVM: Boolean;
    var
      LVMVersion: string;
    begin
      Result := IsRunningVM(LVMVersion);
    end;
    end.

     

×