我在德尔福的过程:我在通过将Pchar Delphi DLL导入C#?
procedure PasswordDLL(month integer; password pchar);
export;
的程序应该输出密码设置为“密码” PChar类型.. 从我读google..and .... REF:HERE和HERE
我想出了:
[DllImport(
"DelphiPassword.dll",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi,
EntryPoint = "PasswordDLL")]
public static extern void PasswordDLL(
int month,
[MarshalAs(UnmanagedType.LPStr)] string password
);
后来,当我打电话:
string pass = "";
PasswordDLL(2, pass);
所以密码输出到“pass”字符串。
但我会得到BadImageFormatException未处理:试图加载一个格式不正确的程序。 (异常来自HRESULT:0x8007000B)
听起来我用的函数格式是错误的? 我不知道如果我使用不正确的UnmanagedType为PChar,但从阅读,它是LPWStr和LPStr ..我错过了什么?
在此先感谢...
谢谢,您的总结帮助我理解。 :) – King 2011-02-23 16:16:42
还有其他的东西会出错:PChar指向的缓冲区必须由调用者分配。否则,您将在退出时体验AV(最好)。你将需要添加一个参数来指定传递给dll的缓冲区的大小,确保它足够大以返回数据 - 包括空字符 - 否则返回一个错误。 – Stephane 2011-02-23 16:47:32
辉煌,这解决了我正在用Delphi 5和C#完美查找的问题。非常赞赏皮特 – nrjohnstone 2013-06-21 22:25:23