如何正確P /調用此功能?如何正確地P/Invoke這個功能?
const char * GetReplyTo(const char * pszInText, char * pszOutText, int len)
我一直試圖做這種方式,得到了訪問衝突異常:
[DllImport("SmartBot.dll", EntryPoint = "GetReplyTo")]
public static extern IntPtr GetReplyTo([In] [MarshalAs(UnmanagedType.LPStr)] string pszInText, IntPtr pszOutText, int len);
// somewhere below:
IntPtr pbuf = GCHandle.Alloc(new byte[1000], GCHandleType.Pinned).AddrOfPinnedObject();
GetReplyTo("hi", pbuf, 2);
UPDATE 下面是該文件的Pascal頭:
{***************************************************************************
* SmartBot Engine - Boltun source code,
* SmartBot Engine Dynamic Link Library
*
* Copyright (c) 2003 ProVirus,
* Created Alexander Kiselev Voronezh, Russia
***************************************************************************
SmartBot.pas : Header Pascal for SmartBot Engine.
}
unit SmartBot;
interface
{
function GetReplyTo(const InText: PChar; OutText: PChar; Len: integer): PChar;stdcall;export;
function LoadMind(MindFile: PChar): integer;stdcall;export;
function SaveMind(MindFile: PChar): integer;stdcall;export;
}
function GetReplyTo(const InText: PChar; OutText: PChar; Len: integer): PChar;stdcall;external 'smartbot.dll' name 'GetReplyTo';
function LoadMind(MindFile: PChar): integer;stdcall;external 'smartbot.dll' name 'LoadMind';
function SaveMind(MindFile: PChar): integer;stdcall;external 'smartbot.dll' name 'SaveMind';
implementation
end.
UPDATE 2它的工作原理。看起來我搞砸了初始化功能。它在成功時返回1,在失敗時返回0。奇怪的。
你的問題的信息不完整。特別是它沒有說明返回值指向的數據的所有權。 – CodesInChaos
我也不知道。我只是試圖導入dll,然後將如何使用調試器正確使用它 – Poma
返回值是否與'out'值相同? – leppie