我用以下方法创建了一个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;
}
我通过SilkTest致电get_name
,如下所示:
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和lname
与Allen。
注意:请考虑在内部调用set_name()
,并且在进行dll调用之前已经设置了名称。
答案 0 :(得分:0)
int __stdcall get_name(char* first, char* last) {
ansicall int get_name(out string name); //dll method declaration
所以第一个有两个参数,第二个有一个参数。他们显然不匹配。你怎么期望在这里得到任何有用的东西?
此外,您的测试似乎没有调用set_name
,因此finalName
只会保留空指针。
答案 1 :(得分:0)
你确定finalName.fullName.name1和finalName.fullName.name2正在设置吗?请确保。 要终止,您可以这样做 首先[strlen(finalName.fullName.name1)] ='\ 0';