这是我在 C++ dll 中的结构和函数
struct Address
{
TCHAR* szAddress;
};
extern "C" DllExport void SetAddress(Address* addr);
从 C# 我想通过传递地址结构来调用这个 API。所以,我在 C# 中有以下内容
[StructLayout(LayoutKind.Sequential)]
public struct Address
{
[MarshalAs(UnmanagedType.LPTStr)]
public String addressName;
}
[DllImport("Sample.dll")]
extern static void SetAddress(IntPtr addr);
现在,这就是我从 C# 调用 C++ API 的方式
Address addr = new Address();
addr.addressName = "Some Address";
IntPtr pAddr = Marshal.AllocHGlobal(Marshal.SizeOf(addr));
Marshal.StructureToPtr(addr , pAddr , false);
SetAddress(pAddr); //CALLING HERE
我在 C++ 代码中为 Address.szAddress 获取 NULL。知道这里出了什么问题吗?