0

我使用以下方法创建了一个 DLL:

typedef struct names {
  const char* name1;
  const char* name2;
} rNames;

typedef struct useNames {
   rNames fullName;
} rUseNames;

rUseNames finalName;

int set_name() {
  finalName.fullName.name1 = "Alfred";
  finalName.fullName.name2 = "Allen";
  return 1;
}

int __stdcall get_name(char* first, char* last) {
  strncpy((char*)first, finalName.fullName.name1, 
     strlen(finalName.fullName.name1));
  strncpy((char*)last, finalName.fullName.name2, 
     strlen(finalName.fullName.name2));
  return 1;
}

get_name通过 SilkTest 拨打电话,如下所示:

ansicall int get_name(out string fname, out string lname); //dll method 
//declaration

STRING name = SPACE(256) //This initialises the name to 256 blank characters
STRING lname = SPACE(256)
get_name(name, lname)

print(name)
print(lname)

问题:

我得到一个空白/空字符串作为输出,而不是“Alfred Allen”。理想情况下,name应该用 Alfred 和lnameAllen 的内容填充。

注意:考虑set_name()在内部调用,并且在调用 dll 之前已经设置了名称。

4

2 回答 2

0
int __stdcall get_name(char* first, char* last) {

ansicall int get_name(out string name); //dll method declaration

所以第一个有两个参数,第二个有一个。他们显然不匹配。您如何期望在这里得到有用的东西?

此外,您的测试似乎没有调用set_name,因此finalName只会保存空指针。

于 2017-11-07T09:14:59.627 回答
0

你确定 finalName.fullName.name1 和 finalName.fullName.name2 正在设置吗?请确保。要空终止,您可以先执行 [strlen(finalName.fullName.name1)] = '\0';

于 2017-11-07T10:58:42.973 回答