Тема: AHK: Как передать строку в DllCall по ссылке и получить строку назад
Есть переменная со строкой, ее нужно передать внутрь функции из DLL библиотеки и назад из этой же DLL нужно получить строку. Передачу желательно делать по ссылке, но если это сложно то можно просто передать саму строку.
Исходная строка что передали внутрь DLL приходит какая-то кривая, при вызове MessageBox из DLL выводится белеберда.
Результат что возвращает DLL значение 8 - это длина строки, она верная, ErrorLevel = 0 - значит все отработало нормально, но вот значение StrOut после вызова пустое, там ничего нет.
Помогите разобрать что нужно поправить чтобы все заработало, чтобы строка принималась и записывалась в StrOut .
код AutoHotkey:
; ---- исходные данные ----
StrIn := "AbCdEfGh" ; исходная строка которую нужно передать в DLL функцию
ptr_StrIn := &StrIn ; указатель на строку StrIn
VarSetCapacity(StrOut, 20) ; переменная куда поместим результат после вызова DLL, для нее зарезервировали 20 байт
ptr_StrOut := &StrOut ; указатель на строку StrOut
Result := DllCall("test.dll\testfunc", StrP, ptr_StrIn, UInt64, StrLen(StrIn), StrP, ptr_StrOut, "CDecl")
MsgBox, DLL вернула значение: %Result% , ErrorLevel: %ErrorLevel% , значение StrOut после вызова: %StrOut%
код функции в DLL (test.c - исходник на C++):
#include <Windows.h> // для MessageBox()
long int testfunc(const unsigned char *in, unsigned long long int inLen, unsigned char *out)
{
char str[20] = "";
for(unsigned long long int i = 0; i < inLen; i++)
{
out[i] = in[i];
str[i] = in[i];
}
MessageBox(NULL, str, "String In", MB_OK);
return inLen;
}