C++ DLL 字符参数
Posted
技术标签:
【中文标题】C++ DLL 字符参数【英文标题】:C++ DLL char paramteters 【发布时间】:2014-10-15 17:11:25 【问题描述】:我想从 C 程序中调用这个 c++ 函数。我想使用 char* errorMessage 返回错误消息。当我在代码中执行 return errorMessage 时,我会在返回后在我的 C 应用程序中获得 char 指针。但如果我尝试 errorMessage = SafeStringHeap(string("File name was empty."));
我总是在我的 C 应用程序中得到一个空指针。
我尝试在 c 应用程序中使用以下文本调用我的函数:
char* errorMessage = NULL;
TAFMessage = (*TAFParseMessageFile)(NULL, errorMessage);
功能:
static char* SafeStringHeap(string message)
//Save string on the heap
char * cstr = new char[message.length() + 1];
strcpy_s(cstr, message.length() + 1, message.c_str());
return cstr;
extern "C" __declspec(dllexport) const char* TAFParseMessageFile(const char* fileName, char* errorMessage)
if (fileName == NULL)
errorMessage = SafeStringHeap(string("File name was empty."));
return errorMessage;
return NULL; // TODO: set errorMessage
【问题讨论】:
为什么会传入错误信息?您认为 SafeStringHeap 函数中分配的内存会发生什么变化?谁来解除分配?什么时候?也许最好传入一个实际的 char 数组,以便您可以将错误消息写入其中? 你的意思是以下?:char errorMessage[100]; TAFMessage = (*TAFParseMessageFile)(NULL, errorMessage); 【参考方案1】:受限于上面提出的其他问题。尝试将您的 errorMessage 参数更改为 char **(指向 char 指针的指针),然后执行以下操作:
*errorMessage = SafeStringHeap(...)
并且在调用函数时传递&errorMessage
【讨论】:
因为当你想操纵一个参数的值时,即使用它作为一个 OUT 变量,你需要添加额外的间接层。例如:使用 int 类型调用函数,如果您希望函数将 int 参数的操作投射回调用者,那么您必须传递该 int 的地址,以便工作函数可以放置新值进入该参数的调用者占位符。 顺便说一句,如果您的问题已得到回答,那么建议您通过接受答案将其标记为已回答。以上是关于C++ DLL 字符参数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用ctypes,python将字符串参数传递给C++函数
C# 调用C++ DLL,而c++函数的有一个参数需要是null,该怎么传递?
字符串数组 C# 与 C++ dll 的互操作性;从 C# 到 C++ dll 的字符串数组,它设置数据并将其发送回 c#