c++ - 从 DLL 获取 char *

标签 c++ dll char loadlibrary

我有一个问题。我的 dll 中有一个函数,定义如下:

int function(char *inVal, char *outVal, int *retVal)

我使用 LoadLibrary 在控制台应用程序中成功加载了我的 dll,并使用函数指针调用了我的函数:

typedef int (__cdecl *functionPtr)(char *, char *,int *);

然后我将我的 inVal 传递给我的函数:

char * inVal = "input";

现在我想获得我的outVal和retVal,我已经成功获得了retVal但是我的outVal是NULL:

int retVal = 0;
char outVal[200] = {0};

然后我调用我的函数:

int return = functionLNK(inVal , outVal, &retVal)

有什么线索吗?!!

编辑 1:

代码如下:

int function(char *inVal, char *outVal, int *retVal) 

{

PKI_Buf inBuf, signBuf, pemBuf;

......


outVal = (char*)pemBuf.data;

//I check outVal in this point and it is not NULL

}

最佳答案

问题出在函数上。您按值传递 outVal,这意味着您在函数中拥有的指针是您传入的指针的拷贝。然后您使用 outVal = (char*)pemBuf 分配给该指针。数据;。您所做的只是修改了拷贝。外部没有发生任何变化。

但这不是您的方法的唯一问题。您还试图将指针传递给即将超出范围的对象成员。 pemBuf 具有自动存储持续时间(因为它是 function 的本地),这意味着它将在返回时被销毁。那么你的指针将指向一个无效的对象。

相反,您要做的是将 pemBuf.data 的内容复制到 outVal 指向的数组元素中。您可以使用 std::copystrcpy 执行此操作。但是,您还有另一个问题,即您没有传递缓冲区的大小(而且我不知道 pemBuf.data 数组的大小)。但是,假设您知道要复制多少作为 N,您可以这样做:

std::copy(pemBuf.data, pemBuf.data + N, outVal);

但是,您的代码非常像 C - 使用 C 风格的字符串、输出参数等。我建议您开始使用 std::string

关于c++ - 从 DLL 获取 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041733/

相关文章:

c++ - 在 Win32API 中注册窗口类

c# - 从 c# 调用的非托管 c++ dll,在 dll 中使用 CString 时崩溃

dll - 用dmd编译D2语言时如何从DLL中导出变量?

delphi - 如何调试使用 regsvr32.exe 制作的 64 位 dll 注册过程?

c - 将字符串分配给 C 中 char 类型的变量

c - 使用 char 指针 -> 段错误

c++ - 仅包含基类 header 时访问派生类

c++ - 为什么在这种情况下 cout 不会溢出?

c - 使用 scanf 分配指针的 char 数组

c++ - 了解如何创建 atoi;字符是如何比较的?