Проблема: DLL .edata
От: Bill Fortnum  
Дата: 13.02.02 00:35
Оценка:
Нужен квалифицированный совет. Есть 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
Re: Проблема: DLL .edata
От: Bill Fortnum  
Дата: 13.02.02 01:15
Оценка:
Sorry, забыл:

extern "C" __declspec(dllexport) void MyFunc(){}
Re[2]: Проблема: DLL .edata
От: Alex Fedotov США  
Дата: 13.02.02 03:26
Оценка:
Здравствуйте Bill Fortnum, Вы писали:

BF>extern "C" __declspec(dllexport) void MyFunc(){}


Секция .edata не является обязательной. Последние версии линкеров просто объединяют ее с .rdata (благо, атрибуты совпадают).

А ответ здесь:
Calling DLL Functions from Visual Basic Applications
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.