Доброго времени суток.
Есть dll расширения, которую использует InstallShield, и вот нужно в этой dll реализовать ф-ию которая бы не только принимала параметры, а и возвратила бы строковый параметр (скажем LPSTR).
В "шилде" есть ф-ия которая может вызывать другие ф-ии с dll.
Вот ее прототип:
CallDLLFx ( szDLL, szFunction, lvValue, svValue );
Но в ней фиксированное определение...
LONG APIENTRY YourFunction (HWND hwnd, LPLONG lpIValue, LPSTR lpszValue);
Мне нужно примерно след. прототип:
LONG APIENTRY YourFunction (HWND hwnd, LPLONG &lpIValue, LPSTR &lpszValue);
Мож кто с этим сталкивался и как-то решил такую проблему.
Заранее благодарен....
Здравствуйте, ozsen, Вы писали:
O>Доброго времени суток.
O>Есть dll расширения, которую использует InstallShield, и вот нужно в этой dll реализовать ф-ию которая бы не только принимала параметры, а и возвратила бы строковый параметр (скажем LPSTR).
O>В "шилде" есть ф-ия которая может вызывать другие ф-ии с dll.
O>Вот ее прототип:
O>CallDLLFx ( szDLL, szFunction, lvValue, svValue );
O>Но в ней фиксированное определение...
O>LONG APIENTRY YourFunction (HWND hwnd, LPLONG lpIValue, LPSTR lpszValue);
O>Мне нужно примерно след. прототип:
O>LONG APIENTRY YourFunction (HWND hwnd, LPLONG &lpIValue, LPSTR &lpszValue);
O>Мож кто с этим сталкивался и как-то решил такую проблему.
O>Заранее благодарен....
используй что-то типа следующего:
#define YourDllName "Something.dll"
prototype stdcall YourDll.YourFunction(HWND hWnd, BYREF LONG n, BYREF STRING str);
// где-то в скрипте
//
UseDLL(YourDllName);
LONG n = 0;
STRING str[255]; // размер обязателен, так как при вызове внешних функций autosize не работает!!!
YourDll.YourFunction(hWnd, n, str);
UnUseDLL(YourDllName);
здесь могу ошибиться, бо не помню
void __stdcall YourFunction(HWND hWnd, LONG& n, LPSTR& str)
{
n = 0;
strcpy(str, "строка"); // здесь будь осторожен. нельзя выходить за пределы выделенной IS строки!!!
}