需要帮助理解c++.h文件
Need help understanding c++ .h file
我正试图用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)来帮助我为对非托管dll的调用编写C#包装器(我只有.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);
在我看来,该工具对"name"answers"loc"的定义是相同的,尽管它们在.h文件中不同。我需要担心这个吗?
非常感谢!
回答您的第一个问题:它们完全相同。char* str
与char *str
相同,char*str
与char * str
相同,等等。
至于C#,恐怕我在那里帮不了什么忙。
如果你感兴趣,或者是相关的,这里有关于c字符串的维基百科页面(这就是你在这里处理的内容)。
之间没有区别
const char* loc
和
const char *loc
一些程序员更喜欢前者,认为*
是类型的一部分。一些程序员更喜欢后者,因为*
实际上只应用于该声明中的一个变量:
char *foo,bar;
在这种情况下,只有foo
是指针;bar
是一个简单的char
。(这就是为什么我更喜欢char *foo
。)
因为在这种情况下它们是相同的,所以在Pinvoker
工具中应该对它们进行相同的处理——除非其中一个是输入参数,另一个是输出,否则可能会发生这种情况。请务必理解要包装的API,以确保您知道哪些是输入,哪些是输出——如果有,则是双向。
1)*
周围的空白并不重要,这两种参数类型是相同的
2) Pinvoker将参数整理如下:
...
[MarshalAs(UnmanagedType.LPStr)] string name,
[MarshalAs(UnmanagedType.LPStr)] string loc,
...
所以,也没有什么区别。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到