Нужен квалифицированный совет. Есть parutils.dll-ка, написанная на Си++:
extern "C" void MyFunc(){}
Все элементарно-просто: делаем DUMPBIN parutils.dll /exports и он функции
сами
выводит, а вот сегмента .edata нету (!!!). То есть из Си может быть эти
функции вызвать и можно, а вот скажем из VB никак не получается.
Я так думаю, что проблема в том, что нету сегмента .edata. ВОПРОС: Как
откомпилировать DLL, чтобы dumpbin (или "быстрый просмотр" — правая клавиша
на .dll файле в Проводнике) давали .edata (или соответственно Exports
table)? А то функции вроде есть, 0 warnings, 0 errors, а вот сегмента .edata
нету, как так?
Здесь .edata нету, а в следующей .dll есть, хотя и там и там функции
экспортируются, как так?
---
Dump of file parutils.dll
File Type: DLL
Section contains the following exports for PARUTILS.dll
0 characteristics
3C69A9BB time date stamp Wed Feb 13 02:48:11 2002
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 00001010 fff
2 1 00001000 vitfunc
Summary
2000 .data
1000 .rdata
1000 .reloc
5000 .text
---
Dump of file bcdll.dll
File Type: DLL
Section contains the following exports for bcdll.dll
0 characteristics
0 time date stamp Thu Jan 01 03:00:00 1970
0.00 version
1 ordinal base
13 number of functions
13 number of names
ordinal hint RVA name
12 0 00003588 @__lockDebuggerData$qv
13 1 000035B0 @__unlockDebuggerData$qv
6 2 0000114C Average
1 3 00001120 Message
2 4 000011F3 UnhandledException
9 5 0000122C VBAverage
10 6 00001244 VBExceptionTest
3 7 00001120 VBMessage
8 8 0000121E VBMultiply
4 9 000011F3 VBUnhandledException
7 A 00001164 _ExceptionTest
5 B 00001140 _Multiply
11 C 000073D4 __DebuggerHookData
Summary
1000 .edata
1000 .idata
1000 .reloc
6000 CODE
2000 DATA
Здравствуйте Bill Fortnum, Вы писали:
BF>extern "C" __declspec(dllexport) void MyFunc(){}
Секция .edata не является обязательной. Последние версии линкеров просто объединяют ее с .rdata (благо, атрибуты совпадают).
А ответ здесь:
Calling DLL Functions from Visual Basic Applications