簡體   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