繁体   English   中英

从DLL获取char *

[英]Get char * from DLL

我有个问题。 我的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

}

问题在于function 你通过值传递outVal ,这意味着你在函数内部的指针是你传入的指针的副本。然后你用outVal = (char*)pemBuf.data;分配给那个指针outVal = (char*)pemBuf.data; 您所做的就是修改副本。 外面没有变化。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM