我正在尝试用 C# 为我需要使用的非托管 C/C++ dll 编写一个包装器。在这个过程中,我试图摆脱我非常古老的 C++ 技能的锈迹。在 .h 文件中,我看到下面的代码。
png_demand_record_create(const char *name, const char* loc, int date, int quantity);
前两个参数是 srings,后两个是整数....对吗?我似乎记得在 c 中确实不是字符串,而是字符数组等。*name 不是指向字符数组的指针吗?为什么在第二个参数中是 * 在 char 中的“r”之后而不是在 loc 中的“l”之前???这两个参数之间的区别是什么?难道只是作者的打字,它真的没有事情?
此外,我正在使用一个工具 (Pinvoker) 来帮助我编写 C# 包装器来调用非托管 dll(我所拥有的只是 .h 文件和编译后的 dll)。该工具为我提供了以下信息:
[DllImport(@"C:\Some.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public extern static png_demand_record_t png_demand_record_create([MarshalAs UnmanagedType.LPStr)] string name,
[MarshalAs(UnmanagedType.LPStr)] string loc,
int date,
int quantity);
在我看来,该工具对“名称”和“位置”的定义是相同的,即使它们在 .h 文件中是不同的。我需要担心这个吗?
万分感谢!