我想寫爲InpOut32 library的C綁定。在D中使用windows lib的正確方法?
首先,我爲此庫下載了binaries。
中有三個文件在裏面:
- inpout32.lib
- inpout32.h
- inpout32.dll
這裏就是我試圖讓d使用此庫。
//io.d
extern(C)
{
void Out32(short PortAddress, short data);
short Inp32(short PortAddress);
}
// test.d
import std.stdio;
import io;
// parallel port address
short port = 0x0378;
void main()
{
/* data */
short data = 0b_00000000;
Out32(port, data);
}
編譯: DMD -c test.d io.d 結果:全成
鏈接:鏈接test.obj io.obj inpout32.lib
但是,當我嘗試鏈接我得到這個鏈接器錯誤:
OPTLINK (R) for Win32 Release 8.00.12 Copyright (C) Digital Mars
1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html inpout32.lib Offset 00000H
Record Type 0021 Error 138: Module or Dictionary corrupt
庫文件可能是COFF格式。我認爲工具是不是免費的,所以我用Borland的coff2omf
工具OMF format.After轉換我仍然得到鏈接錯誤是這樣的:
OPTLINK (R) for Win32 Release 8.00.12
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
test.obj(test) Error 42: Symbol Undefined _Out32
任何想法如何使用這個LIB?謝謝..
更新: 我今天看了一個關於interesting article爲d的編程語言創建綁定C庫。
現在test.exe按預期工作。到目前爲止我已經完成了這些步驟。
編譯: DMD -c -g test.d io.d
感謝Ali Çehreli用於提-g選項。加入-g標誌後access violation errors
消失。
生成OMF導入庫: IMPLIB -a inpout32.lib inpout32.dll
鏈接:鏈接test.obj io.obj inpout32.lib
這一點,我想嘗試一下之後手動加載DLL的。感謝您花時間回答,每個人!
搜索coff2omf我認爲 – Mehrdad 2012-07-10 22:01:16