111,097
社区成员




[DllImport("Dll_Test.dll", EntryPoint = "Interface_Sub", CallingConvention = CallingConvention.Cdecl)]
public extern static int Interface_Sub(ref Sub sub);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct Sub
{
public IntPtr path;
public int num;
};
private void FuncSub()
{
var sub = new Sub();
sub.path = Marshal.StringToHGlobalAnsi("TestSub");
sub.num = 5;
var rst = Interface_Sub(ref sub);
}
struct Sub
{
char* path;
int num;
};
extern "C" __declspec(dllexport) int Interface_Sub(Sub* sub);
int Interface_Sub(Sub* sub)
{
return 5;
}
public extern static int Interface_Sub(ref Sub sub);
//[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]//不要上面的"Pack = 1"
public struct Sub
{
public IntPtr path;
public int num;
};
private void FuncSub()
{
var sub = new Sub();
sub.path = Marshal.StringToHGlobalAnsi("TestSub");
sub.num = 5;
var rst = Interface_Sub(ref sub);
}
这样就ok了