C# .NET与TApplication的等价物是什么?如何在.NET托管代码中调用此Dll?

C# .NET与TApplication的等价物是什么?如何在.NET托管代码中调用此Dll?,c#,.net,delphi,dllimport,C#,.net,Delphi,Dllimport,以下是调用dll函数的cpp代码“ 这是我调用函数的C#代码“ 以及函数调用: terminal(IntPtr.Zero, FileHandle.DangerousGetHandle(), CommHandle, 0); 若我在应用程序ptr设置为this.Handle的情况下调用终端,我会得到一个System.AccessViolationException未处理 消息=尝试读取或写入受保护内存。这通常表示其他内存已损坏。无法从.net创建Delphit应用程序。无法从.net创建Delph

以下是调用dll函数的cpp代码“

这是我调用函数的C#代码“

以及函数调用:

terminal(IntPtr.Zero, FileHandle.DangerousGetHandle(), CommHandle, 0);
若我在应用程序ptr设置为this.Handle的情况下调用终端,我会得到一个System.AccessViolationException未处理
消息=尝试读取或写入受保护内存。这通常表示其他内存已损坏。

无法从.net创建Delphi
t应用程序。无法从.net创建Delphi
TFileStream
。此DLL似乎不受除Delphi或C++ Builder之外的任何其他东西的影响。 如果DLL还导出了创建
TApplication
TFileStream
实例的函数,然后您可以将这些实例传递给问题中的函数,您就可以希望它从.net工作


t应用程序
类是表示应用程序的VCL类。它相当于WinForms
应用程序
类。同样地,
TFileStream
是一个VCL类,它在类似流的接口中包装文件I/O。.net
FileStream
类与此类似。但是您根本无法从.net合成Delphi/VCL类的工作实例。

当我用“IntPtr.Zero”调用它时,dll能够创建它的窗口,但随后在模块“somedll.dll”中的“0xXXXX”处由于访问冲突而失败。阅读地址XXXXXXXXX。似乎没有相应的地址。如果您有问题的更新,请修改问题。使用评论发布“更新”会让人困惑。同意。进一步调查证实了这一点。我可以使用IntPtr.Zero作为TApplication*启动窗口,它工作得很好,但是当它尝试从TFileStream读取时,它会像预期的那样出现访问冲突错误。出于兴趣,DLL是什么?奇怪的是,有人会编写一个只能由Delphi主机使用的DLL。@DavidHeffernan-这是一个由该公司的C++/Delphi编辑器编译的DLL:@Ramhound你怎么知道?嗯,是的,@Ramhound。当然是那家公司编的,;Embarcadero是编译器供应商,编译器在其生成的所有内容中都留下了自己的印记。只有Delphi或C++ Builder编译器才能导出接收TApple的函数。问题是谁是DLL供应商。
[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);