Вот случай:
Я сделал DLL с function1 внутри, как показано ниже:
int function1( char *inVal, char *outVal)
{
....
strcpy(outVal,dn.commonname.c_str());
}
в последней строке outVal указывает на dn.commonname, которое является строкой.
Я загрузил эту DLL в другую DLL с LoadLibrary успешно. Во второй dll у меня есть:
int function1(string inval, string &outVal)
{
typedef int (WINAPI *func1Ptr)(char *, char *);char outValPtr[128] = {0};
int retVal = func1Lnk((char *)inVal.c_str(), outValPtr);
string outVal = outValPtr;
}
Теперь я загружаю второй dll в своем коде и вызываю fnuction1, но когда я проверяю второй аргумент функции, я получаю NULL.
Кто-нибудь может пролить свет на это?
EDIT-1
Я изменил свой код на:
int function1(string inVal, string &outVal)
{
typedef int (WINAPI *func1Ptr)(char *, char *);char outValPtr[128] = {0};
int retVal = func1Lnk((char *)inVal.c_str(), outValPtr);
outVal = outValPtr;
}
Но проблему не решили. какая-нибудь подсказка?
Вы объявляете локальную переменную, скрывающую аргумент:
string outVal = outValPtr;
Ну, это же почти отслеживание аргумента, потому что написание имен отличается. Переменная с именем outVal
не та же переменная, что и названная outval
, Имена в C ++ зависят от регистра.
Других решений пока нет …