in/out параметры ф-ий в dll которые вызывает InstallShield
От: ozsen  
Дата: 21.10.05 12:01
Оценка:
Доброго времени суток.

Есть 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);

Мож кто с этим сталкивался и как-то решил такую проблему.

Заранее благодарен....
Re: in/out параметры ф-ий в dll которые вызывает InstallShie
От: Андрей Россия  
Дата: 07.11.05 09:34
Оценка:
Здравствуйте, 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 строки!!!
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.