这是调用dll函数的cpp代码“
typedef void (__stdcall *Terminal)(TApplication*, TFileStream *k, HANDLE N, int D);
这是我调用函数“
的C#代码[DllImport("somedll.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
static extern void terminal(IntPtr Application, IntPtr FileStream, IntPtr CommHandle, int mode);
和函数调用:
terminal(IntPtr.Zero, FileHandle.DangerousGetHandle(), CommHandle, 0);
如果我调用终端并将Application ptr设置为this.Handle我得到一个System.AccessViolationException未处理 Message =尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
答案 0 :(得分:2)
您无法从.net创建Delphi TApplication
。您无法从.net创建Delphi TFileStream
。除了Delphi或C ++ Builder之外,这个DLL似乎无法访问。
你希望它能从.net工作的唯一方法是,如果DLL也导出了创建TApplication
或TFileStream
实例的函数,那么你可以将其传递给函数你的问题。
TApplication
类是表示应用程序的VCL类。它相当于WinForms Application
类。同样,TFileStream
是一个VCL类,它在类似流的接口中包装文件I / O. .net FileStream
类是类似的。但是你根本无法从.net。