什么是.NET相当于TApplication或如何在.NET托管代码中调用此Dll?

时间:2011-10-24 17:33:41

标签: c# .net delphi dllimport

这是调用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 =尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

1 个答案:

答案 0 :(得分:2)

您无法从.net创建Delphi TApplication。您无法从.net创建Delphi TFileStream。除了Delphi或C ++ Builder之外,这个DLL似乎无法访问。

你希望它能从.net工作的唯一方法是,如果DLL也导出了创建TApplicationTFileStream实例的函数,那么你可以将其传递给函数你的问题。

TApplication类是表示应用程序的VCL类。它相当于WinForms Application类。同样,TFileStream是一个VCL类,它在类似流的接口中包装文件I / O. .net FileStream类是类似的。但是你根本无法从.net。

合成Delphi / VCL类的工作实例