gpt4 book ai didi

c# - 从 C# 调用包含指针的 Delphi DLL 结构不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:19 24 4
gpt4 key购买 nike

我有一个这样定义的delphi dll

type
tSSL_connect = packed record
pssl : Pointer;
pctx : Pointer;
sock : Integer;
end;

function SSLCLT_Connect(pIPAddr: PChar;
iPort: Integer;
var pConn: tSSL_connect;
iTimeout: Integer;
bEnableNonBlockingMode: BOOL = TRUE): BOOL;
stdcall; external cltdll;

我像这样转换为 C#:

[StructLayout(LayoutKind.Sequential,CharSet = CharSet.Ansi, Pack=1)]
public unsafe struct tSSL_connect
{
public IntPtr pssl;
public IntPtr pctx;
public UInt32 sock;
};

[DllImport("cltdll.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern bool SSLCLT_Connect(string pIPAddr, UInt32 iPort, ref tSSL_connect pConn, UInt32 iTimeout, bool bEnableNonBlockingMode);

调用是这样的:

tSSL_connect conn = new tSSL_connect();
btest = SSLCLT_Connect("127.0.0.1", 3858, ref conn, 1500, false);

它要求打开一个 channel 并将其写入conn。它返回错误。所以我过不去。 conn 对象返回 null。我知道服务器正在接收我的调用。

我认为它与类型错误的结构 C# 有关。我对非托管的东西很陌生,所以如果有人可以帮助通过。

我只有dll。谢谢

最佳答案

尝试使用 char(以 NULL 结尾的字符串)并将指向该 char 的指针作为参数提供给函数。

应该适用于字符串。

关于c# - 从 C# 调用包含指针的 Delphi DLL 结构不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com