当我把一个char*作为参数传给一个DLL时,从DLL中 "返回 "一个char*时,可以得到一个新的char*,但当我只用那个char*参数,什么也不返回时,就无法完成。
这个DLL函数是OK的,看来我可以把一个char*传给DLL。
void getStr(char *str){
print("%s\n", str);
}
这个也可以。似乎我可以在DLL里面修改一个指针。
void setInt(int a, int b, int *sum){
*sum = a + b;
}
但是当指针指向一个char数组的时候,就没有任何运气了,我尝试调用这个DLL函数。
void setStr(char* str) {
char tmp[] = "From DLL";
int len = strlen(tmp) + 1;
str = (char*)malloc(len);
memcpy(str, tmp, len);
}
我试着从c++程序中调用这个DLL函数,就像这样。
int main()
{
char tmp[] = "Hello World!";
setStr(tmp); // I hope I can get "From DLL" here.
std::cout << tmp;
}
如果我把DLL函数的返回值设置为char*,然后在c++程序中获取返回值,一切都很正常,但我不能只用参数来做。
我是不是错过了什么?
要修改给定的字符串缓冲区,修改给定的字符串缓冲区。
void setStr(char* str) {
char tmp[] = "From DLL";
int len = strlen(tmp) + 1;
memcpy(str, tmp, len);
}
int main()
{
char tmp[] = "Hello World!";
setStr(tmp); // I hope I can get "From DLL" here.
std::cout << tmp;
}
要修改指针,就传递一个指针的指针。
void setStr(char** str) {
char tmp[] = "From DLL";
int len = strlen(tmp) + 1;
*str = (char*)malloc(len);
memcpy(*str, tmp, len);
}
int main()
{
char tmp[] = "Hello World!";
char* ptmp = tmp; // character array is NOT a pointer, so add a pointer to modify
setStr(&ptmp); // I hope I can get "From DLL" here.
std::cout << ptmp;
}