Вызов DLL для метода, включающего strncpy ()

Я создал 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)

Эта проблема:

Я получаю пустая / пустая строка в качестве выхода, а не «Альфред Аллен». В идеале, name должны быть заполнены содержанием Альфреда и lname с Алленом.

ПРИМЕЧАНИЕ: учтите, что set_name() вызывается изнутри, и имя уже установлено до вызова dll.

0

Решение

Вы уверены, что finalName.fullName.name1 и finalName.fullName.name2 установлены? Пожалуйста, убедитесь, что.
Для нулевого завершения вы можете сделать
first [strlen (finalName.fullName.name1)] = ‘\ 0’;

0

Другие решения

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

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

Таким образом, у первого есть два параметра, у второго — один. Они явно не совпадают. Как вы ожидаете получить что-нибудь полезное здесь?

Кроме того, ваш тест не кажется, чтобы позвонить set_name, так finalName будет содержать только нулевые указатели.

0

По вопросам рекламы [email protected]