我希望这不是一个骗局;我担心我不知道搜索是否正确,所以我只会解释我的问题。
我正在用C ++ / CLI包装一个大型的第三方C / C ++ API,这样我就可以在.Net C#插件框架中使用这些最终的程序集来处理更大的应用程序。
API确实附带了一些文档,头文件,dll和lib文件,因此第一次安装很简单:在Visual Studio 2013中,我启动了一个CLR /类库项目,将文件添加到文件夹,添加include目录/依赖项/使用目录到配置表。
但是,尝试使用API的导出全局函数会抛出错误列表,因为参数默认为NULL
APPIMPEXP void GetPartner(TCHAR* pHst = NULL)
失败,因为(C2065)'NULL':未声明的标识符
所以在加入之前我尝试了一个又一个丑陋的黑客
#define NULL nullptr;
同一行现在有错误(C2143)语法错误:缺少')'之前;
#define NULL 0
同样的错误。
extern "C"
{
#include "apidll.h"
}
相同错误
在此之前我用CLI做的很少,但我很惊讶我这么早就难过了。是我唯一的选择PInvoke?我最初试图避免这种情况,因为API严重依赖于回调,我最终确定了一种将委托编组为回调的方法。
答案 0 :(得分:0)
#define NULL nullptr;
这个问题让我觉得你做过的事情中最正确的事情(虽然有些精通C ++的人可能会有不同的看法)。但是,那里有一个错误:删除分号。请记住,#define是简单的文本替换,因此该方法变为GetPartner(TCHAR* pHst = nullptr;)
,这是不正确的。