你需要做的第一件事就是在C#端使用stdcall
:
[DllImport("DLL.dll", CallingConvention=CallingConvention.StdCall,
CharSet=CharSet.Auto)]
我還希望確保德爾福一邊是交德爾福2009年,因此使用寬字符。如果是這樣,那麼這裏沒有問題。如果你使用的是非Unicode的Delphi,那麼你需要CharSet.Ansi
。
我可能也對德爾福側返回LongBool
與
[return: MarshalAs(UnmanagedType.Bool)]
回.NET方面名帥它。
最後,固定長度陣列需要被不同地編組。固定長度字符數組的標準方法是在.NET端使用StringBuilder
,這是您希望編組的。
把它完全和修復你的Delphi語法,給出了:
德爾福
type
TFixedLengthArray = array [1..200] of char;
function Get_Matrix(var Matrix: TFixedLengthArray): LongBool; stdcall;
C#
[DllImport("DLL.dll", CallingConvention=CallingConvention.StdCall,
CharSet=CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool Get_Matrix(StringBuilder Matrix);
static void Main(string[] args)
{
StringBuilder Matrix = new StringBuilder(200);
Get_Matrix(Matrix);
}
最後,確保你空終止您的字符串,當你從你的DLL中返回它!
嗨,問題依然存在。這似乎是相對於「字符數組」,當我沒有parametersthe程序仍在運行申報進口,但是當我宣佈char參數, – 2011-02-24 16:58:31
德爾福的版本? – 2011-02-24 17:00:22
嗨,我以前沒有想過。我忘記了陣列編組。我相信更新後的答案會爲你做好這項工作。 – 2011-02-24 17:23:00