Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.0.89] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Привет всем
такой вопрос я к программе, написанной в Borland C++ Builder подключаю библиотеку, написанную на Visual C++ HINSTANCE hModule=NULL; typedef BOOL (WINAPI w); w* w1=NULL; hModule=LoadLibrary("S.dll"); if (hModule!=NULL) { w1=(w*)GetProcAddress(hModule,"?S_Rec@@YAXPAD@Z"); if (w1!=NULL) { char SOut [256]; S_Rec(SOut); } else { ShowMessage("error load S_Rec"); } ::FreeLibrary(hModule); } else { ShowMessage("error load S.dll"); } изначально функция имеет вид S_Rec(char *pRecResult); при конвертировании она изменяется на ?S_Rec@@YAXPAD@Z Как мне к ней обращаться? S.def LIBRARY S.DLL EXPORTS ?S_Init@@YAXXZ @1 ; ?S_Init@@YAXXZ ?S_Rec@@YAXPAD@Z @2 ; ?SIRIUS_Rec@@YAXPAD@Z ?S_Testing@@YAXXZ @3 ; ?S_Testing@@YAXXZ |
Сообщ.
#2
,
|
|
|
У меня дежавю? :
Цитата preya @ LIBRARY S.DLL EXPORTS ?S_Init@@YAXXZ @1 ; ?S_Init@@YAXXZ ?S_Rec@@YAXPAD@Z @2 ; ?S_Rec@@YAXPAD@Z ?S_Testing@@YAXXZ @3 ; ?S_Testing@@YAXXZ Добавлено 6.09.06, 11:19 еще вопрос как осуществить явный вызов функций DLL? можно пример где-то видела а сейчас не могу найти Цитата preya @ использую явный вызов функций все работает HINSTANCE hModule=NULL; typedef bool (WINAPI w); w* w1=NULL; w* w2=NULL; hModule=LoadLibrary("S.dll"); if (hModule!=NULL) { w1=(w*)GetProcAddress(hModule,"?S_Init@@YAXXZ"); w2=(w*)GetProcAddress(hModule,"?S_Testing@@YAXXZ"); if (w1==NULL) { ShowMessage("error load function S_Init"); } if (w2==NULL) { ShowMessage("error load function S_Testing"); } ::FreeLibrary(hModule); } else { ShowMessage("error load library SIRIUS.dll"); } тема закрыта ВСЕМ ОГРОМНОЕ СПАСИБО!!! Это цитаты из ошибка при подключении *.lib файла, Linker Error |
Сообщ.
#3
,
|
|
|
было
библиотеку подключила работает а вот как к этой функции обращаться? или надо было в той же теме вопрос задать? |
Сообщ.
#4
,
|
|
|
Цитата preya @ Что это за странный вид такой? А где тип возвращаемого значения? Да и соглашение о передаче параметров лучше указывать явно. изначально функция имеет вид |
Сообщ.
#5
,
|
|
|
void S_Rec(char *pRecResult); |
Сообщ.
#6
,
|
|
|
Цитата preya @ Ты же получила адрес функции, присвоила его переменной типа "указатель на функцию". Теперь вызывай функцию, используя этот указатель. а вот как к этой функции обращаться? |
Сообщ.
#7
,
|
|
|
но функция в борланде выглядит так
?S_Rec@@YAXPAD@Z при ее вызове выдается ошибка Expression syntax а при вызове char SOut [256]; S_Rec(SOut); выдается ошибка [Linker Error] Unresolved external 'S_Rec(char *)' referenced from D:\AC\FORM.OBJ как мне ее вызывать??? |
Сообщ.
#8
,
|
|
|
Я не понял. А к чему тогда шаманство с LoadLibrary/GetProcAddress ?
|
Сообщ.
#9
,
|
|
|
w1=(w*)GetProcAddress(hModule,"?S_Rec@@YAXPAD@Z"); if (w1!=NULL) { char SOut [256]; //S_Rec(SOut); - O, main God! w1(SOut); } |
Сообщ.
#10
,
|
|
|
ой
поняла тогда ошибка [C++ Error] Form.cpp(143): E2314 Call of nonfunction я неправильно w1 объявляю? |
Сообщ.
#11
,
|
|
|
preya Научись пользоватся def файлами.
|
Сообщ.
#12
,
|
|
|
как???
Добавлено что я не так делаю? |
Сообщ.
#13
,
|
|
|
preya, объяви тип указатель на функцию, потом сам указатель и вызывай!
typedef void (*SREC)(char*); //тип SREC S_Rec; //указатель S_Rec = (SREC)GetProcAddress(hModule, ","?S_Rec@@YAXPAD@Z"); if (S_Rec != NULL) { char SOut[256]="hello"; S_Rec(SOut); } |
Сообщ.
#14
,
|
|
|
ура
получилось!!! ОГРОМНОЕ СПАСИБО!!! HINSTANCE hModule=NULL; typedef BOOL (WINAPI *SREC)(char*); SREC S_Rec=NULL; hModule=LoadLibrary("S.dll"); if (hModule!=NULL) { S_Rec=(SREC)GetProcAddress(hModule,"?S_Rec@@YAXPAD@Z"); if (S_Rec!=NULL) { char SOut[256]; S_Rec(SOut); } else { ShowMessage("error load function S_Rec"); } ::FreeLibrary(hModule); } else { ShowMessage("error load library S.dll"); } |
Сообщ.
#15
,
|
|
|
Цитата preya @ как??? http://search.msdn.microsoft.com/search/Redirect.aspx?title=Module-Definition+(.def)+Files+&url=http://msdn2.microsoft.com/en-us/library/28d6s79h.aspx вот так. Читай про секцию EXPORTS. |