如何修改DLL中的char*?

问题描述 投票:0回答:1

当我把一个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++程序中获取返回值,一切都很正常,但我不能只用参数来做。

我是不是错过了什么?

c++ c winapi
1个回答
3
投票

要修改给定的字符串缓冲区,修改给定的字符串缓冲区。

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.