Resolved FatalExecutionEngineError Occur after DllImport

parker1107

New member
Joined
Jan 30, 2024
Messages
2
Programming Experience
1-3
I have a Delphi DLL(x64) that provides a method to log in to the server.
I tried to add this method in a specific SDK. (COM Visible=true,select x64 for the platform)

Here is Delphi Code:
Function LoginLic(sFD,sVD,sINI,sCh,sSD: string) : PWideChar; stdcall;
var sysServer,sysPort,sysLN,sysCN,sysIP,sysMac,sysDN,sysFN,sysFV,sysSN,
    sFile,sHost,sPort,sSN,
    sTempPath : string;
    myIni : TIniFile;

begin
   { example:
   [Connection]
   HostName = 192.168.1.187
   Port = 220
   }
   sHost := '127.0.0.1';
   sPort := '220';
   sSN   := 'SN109001';
   sTempPath := sINI;
   ForceDirectories(sTempPath);
   sFile     := sTempPath;
   if FileExists(sFile) then
   begin
      myIni := TIniFile.Create(sFile);
      sHost := myIni.ReadString('Connection', 'HostName', '127.0.0.1');
      sPort := myIni.ReadString('Connection', 'Port', '220');
      sSN   := myIni.ReadString('Connection', 'SerialNo', 'SN109001');
   end
   else
   begin
      myIni := TIniFile.Create(sFile);
      myIni.WriteString('Connection', 'HostName', '127.0.0.1');
      myIni.WriteString('Connection', 'Port', '220');
      myIni.WriteString('Connection', 'SerialNo', 'SN109001');
   end;

   sysServer := sHost;
   sysPort   := sPort;
   sysDN   := GetDomainName;
   sysLN   := GetLoginName;
   sysCN   := GetMyHostName;
   sysIP   := GetIP;
   sysMac  := GetMac;
   sysFN   := sFD;
   sysFV   := sVD;
   sysSN   := sSN;
   try
      Result := PWideChar(DoConnect(sysServer,sysPort,sysLN,sysCN,sysIP,sysMac,sysDN,sysFN,sysFV,sysSN,sCh,sSD));
   except
      Result := PWideChar('0;'+Result);
   end;
   Result := PWideChar(Result);

end;

Method in Main.cs:
public class EDABank
{
    [DllImport(nameof(EDABank), CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
    [return: MarshalAs(UnmanagedType.LPTStr)]
    public static extern string LoginLic(string name, string version, string inipath, string checkDate, string subDate);
}

 string msg = EDABank.LoginLic(name, version, ini file path, "0", "");
 MessageBox.Show(msg);

I set a breakpoint at MessageBox.Show and get the message that I expected.

Then, throw the exception:
Managed Debugging Assistant 'FatalExecutionEngineError': 'The runtime has encountered a fatal error. The address of the error was at 0x0a283aad, on thread 0xd774. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.'


Is it possible to confirm what caused the problem to occur?
 
Last edited:
Solution
What happens if you comment out the contents of the entire Delphi procedure, and just have it return the string "Hello, World"? Do you get the same crash?

Hi, Skydiver
I tried your suggestion this morning.
First, it just returned "Hello World!" in Delphi, it worked, and there was no error.
Then, I added ShowMessage after each function in Delphi DLL for confirmation errors.
The weird thing is that everything is working and FatalExecutionEngineError is gone.
Please provide ALL the relevant details in the thread. The title should just be a summary of what is in your post(s) yet I see no mention of an actual error in your post. Please provide a FULL and CLEAR explanation, including exactly what you did and exactly what happened.
 
What happens if you comment out the contents of the entire Delphi procedure, and just have it return the string "Hello, World"? Do you get the same crash?
 
What happens if you comment out the contents of the entire Delphi procedure, and just have it return the string "Hello, World"? Do you get the same crash?

Hi, Skydiver
I tried your suggestion this morning.
First, it just returned "Hello World!" in Delphi, it worked, and there was no error.
Then, I added ShowMessage after each function in Delphi DLL for confirmation errors.
The weird thing is that everything is working and FatalExecutionEngineError is gone.
 
Solution

Latest posts

Back
Top Bottom