我有一个由Delphi(未知版本)编写的第三方“mystery dll”,在Delphi中有工作示例(2009年以后),迫切需要在我的C#代码中使用该dll,但我几乎没有相关知识来完成此操作。
以下是使用此dll的Delphi示例:
这是我尝试用C#解释它的代码:
很遗憾,我遇到了一个错误:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
根据我在白天阅读的内容,我可能在返回类型或参数类型上出了问题。能帮忙吗?
以下是使用此dll的Delphi示例:
type
TD_Query = function(host: WideString; port : Word;pud,query : WideString):WideString; stdcall;
procedure TForm11.Button6Click(Sender: TObject);
var
Handle : LongWord;
D_Query : TD_Query;
sss : WideString;
begin
Handle := LoadLibrary('kobrasdk.dll');
sss:='';
if Handle <> 0 then
begin
@D_Query := GetProcAddress(Handle, 'D_Query');
sss:=D_Query('host',8201,'pud','query');
FreeLibrary(Handle);
end;
end;
这是我尝试用C#解释它的代码:
class Program
{
[DllImport("C:\\Games\\kobrasdk.dll", CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string D_Query(string host, ushort port, string pud, string query);
static void Main(string[] args)
{
D_Query("test", 8201, "test", "test");
}
}
很遗憾,我遇到了一个错误:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
根据我在白天阅读的内容,我可能在返回类型或参数类型上出了问题。能帮忙吗?