I need to rewrite some Delphi code to C++ and we need to link to the dynamic library TMLComm2004.dll. It turns out that we don't have any .lib file so we decided to generate it, using the following command lines:
dumpbin /EXPORTS C:\Users\fayard\Desktop\TMLComm2004.dll > C:\Users\fayard\Desktop\TMLComm2004.txt
We obtain the following file
Microsoft (R) COFF/PE Dumper Version 14.00.24215.1
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file C:\Users\fayard\Desktop\TMLComm2004.dll
File Type: DLL
Section contains the following exports for TMLcomm.dll
00000000 characteristics
401F6AD5 time date stamp Tue Feb 3 10:33:09 2004
0.00 version
1 ordinal base
27 number of functions
27 number of names
ordinal hint RVA name
1 0 00001122 _MSK_COFFDownloadFlash@16
2 1 0000114F _MSK_COFFDownloadRAM@20
3 2 0000106E _MSK_CheckSum@12
4 3 00001172 _MSK_CloseComm@0
5 4 00001190 _MSK_GetActiveBoard@4
6 5 0000109B _MSK_GetBoardInfo@8
7 6 0000104B _MSK_GetBytesCountInQueue@0
8 7 0000119A _MSK_GetChar@4
9 8 000010E6 _MSK_GetCharNoWait@4
10 9 000011A4 _MSK_GetCommBaudRate@4
11 A 000010DC _MSK_GetHostBoard@4
12 B 0000108C _MSK_OpenComm@16
13 C 000011DB _MSK_ReceiveData@16
14 D 000011CC _MSK_ReceiveMessage@4
15 E 0000105A _MSK_RegisterReceiveUnsolicitedMsgHandler@4
16 F 000011AE _MSK_ResetMSKBoard@0
17 10 00001037 _MSK_SendChar@4
18 11 000010EB _MSK_SendData@16
19 12 0000126C _MSK_SendMessage@4
20 13 0000128F _MSK_SetActiveBoard@4
21 14 00001136 _MSK_SetB0BlockAsData@4
22 15 0000100A _MSK_SetBoardBaudRate@4
23 16 00001019 _MSK_SetCharMode@4
24 17 00001168 _MSK_SetCommBaudRate@4
25 18 00001050 _MSK_SetDebugWindow@8
26 19 00001276 _MSK_SetHostBoard@4
27 1A 00001046 _MSK_UpdateCommTimeouts@0
Summary
C000 .data
3000 .idata
6000 .rdata
4000 .reloc
21000 .rsrc
3E000 .text
2000 shdata
Then, we have edited the TMLComm2014.txt file and changed it to a .def file with the @xx removed. The file looks like:
EXPORTS
_MSK_COFFDownloadFlash
...
Then, we generate a .lib file with:
lib /def:C:\Users\fayard\Desktop\TMLComm2004.def /out:C:\Users\fayard\Desktop\TMLComm2004.lib
We compile the following program:
extern "C" {
bool MSK_OpenComm(unsigned char a, unsigned short b, bool c, unsigned char d);
}
...
When we compile and link against the .lib, we get an error:
LNK2019 unresolved external symbol _MSK_OpenComm referenced in function...
What's wrong with what I do?
Update
I have managed to compile with:
extern "C" {
bool __stdcall MSK_OpenComm(unsigned char a, unsigned short b, bool c, unsigned char d);
}
but now the problem is at link time. I am puzzled as from command line, I have:
==================================================
dumpbin /headers TMLComm.lib
Version : 0
Machine : 14C (x86)
TimeDateStamp: 5964C365 Tue Jul 11 14:24:05 2017
SizeOfData : 00000022
DLL name : TMLComm2004.dll
Symbol name : __MSK_OpenComm@16
Type : code
Name type : no prefix
Hint : 11
Name : _MSK_OpenComm@16
==================================================
dumpbin /exports TMLComm.dll
12 B 0000108C _MSK_OpenComm@16
==================================================
Compilation goes fine now, but the problem is at link time:
link tmlcomm.obj Motor.obj main.obj TMLComm.lib /out:main.exe
Microsoft (R) Incremental Linker Version 14.00.24215.1
Copyright (C) Microsoft Corporation. All rights reserved.
tmlcomm.obj : error LNK2019: unresolved external symbol _MSK_OpenComm@16 referenced in function "bool __cdecl msk_opencomm(unsigned char,unsigned short,bool,unsigned char)" (?msk_opencomm@@YA_NEG_NE@Z)
Teclis.exe : fatal error LNK1120: 1 unresolved externals