Подключение к Visual C++ Dll от ...

Odi$$ey Odi$$ey
Здравствуйте, LordWin, Вы писали:

LW>Как имея Dll которая была написана для експорта в Visual Basic (стянул у автора а обратного адреса для мыла у него нету) перенести в Visual C++ 7 .NET ????

LW>Visual C++ 7 .NET говорит что .lib файл неподходит или же битый ....

1. берем проект, в котором надо использовать твою mdmxsvr.dll, подключаем h и lib, какие есть:

#include "mdmxsvr.h"
#pragma comment(lib, "mdmxsvr")

ага, lib-а не нравится:

mdmxsvr.lib : warning LNK4003: invalid library format; library ignored

2. Создаем свою (IMPDEF.exe из комплекта Borland C++ Builder):

impdef.exe mdmxsvr.def mdmxsvr.dll

получился mdmxsvr.def:

LIBRARY     MDMXSVR.DLL

EXPORTS
    MDMX_Close                     @4   ; MDMX_Close
    MDMX_GetDMXTransmissions       @3   ; MDMX_GetDMXTransmissions
    MDMX_OpenSerialDevice          @1   ; MDMX_OpenSerialDevice
    MDMX_SetChannel                @2   ; MDMX_SetChannel
    ___CPPdebugHook                @5   ; ___CPPdebugHook

далее:

lib.exe /def:mdmxsvr.def

lib.exe — из комплекта Visual C++. Перед запуском этой команды нужно установить переменные окружения для данной консоли вызовом bat-файла C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat, иначе lib.exe не найдет нужных ему dll.

Подключаем к проекту получившеюся mdmxsvr.lib

3. Lib-а съелась нормально, однако, при попытке добавить вызов функций из dll, ошибка

MainDlg.obj : error LNK2019: unresolved external symbol _MDMX_Close@0 ...
MainDlg.obj : error LNK2019: unresolved external symbol _MDMX_GetDMXTransmissions@0 ...
MainDlg.obj : error LNK2019: unresolved external symbol _MDMX_SetChannel@8 ...
MainDlg.obj : error LNK2019: unresolved external symbol _MDMX_OpenSerialDevice@8 ...

4. Правим def-файл, чтоб привести имена функций к тем, которые ищет VC:

LIBRARY     MDMXSVR.DLL

EXPORTS
    MDMX_OpenSerialDevice@8     =  MDMX_OpenSerialDevice     @1   ; MDMX_OpenSerialDevice
    MDMX_SetChannel@8           =  MDMX_SetChannel           @2   ; MDMX_SetChannel
    MDMX_GetDMXTransmissions@0  =  MDMX_GetDMXTransmissions  @3   ; MDMX_GetDMXTransmissions
    MDMX_Close@0                =  MDMX_Close                @4   ; MDMX_Close

пересоздаем lib-у

lib.exe /def:mdmxsvr.def

заглядываем внутрь lib-ы, убеждаемся, что там присутствуют искомые _MDMX_Close@0, _MDMX_SetChannel@8 и т.д.

Компилируем... Все OK.
... << RSDN@Home 1.1.4 beta 6 rev. 431>>