首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 調用 C++ DLL 傳遞 NULL 結構體指針:IntPtr.Zero 映射

     編輯:程式設計綜合問答

C++ 簽名

DEVICE_ID NSSTCreateDevice(NsstDevice* device, AppProxy* proxy);

調用時第二參數傳 `NULL`:`NSSTCreateDevice(&device, NULL);`

C# 簽名修正

[DllImport("MyDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern ushort NSSTCreateDevice(
    ref NsstDevice device,      // 結構體傳引用
    IntPtr proxy                // 指針類型用 IntPtr
);

調用代碼

NsstDevice dev = new NsstDevice {
    host = "192.168.1.109",
    username = "admin",
    password = "admin",
    protocol_port = 80,
    rtsp_port = 554,
    dev_type = NSST_DEVICE_TYPE.NSSTDEV_H
};

ushort deviceId = NSSTCreateDevice(ref dev, IntPtr.Zero); // NULL 對應 IntPtr.Zero

結構體定義要點

  • `[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]` 確保內存佈局一致。
  • 字符串字段用 `[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]` 固定長度,避免指針封送。
  • `CallingConvention.Cdecl` 必須與 C++ 一致(默認 `__cdecl`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved