我有很多遺留代碼,我目前使用Borland C++ 3.0的過時安裝進行編譯。Dllimport無法導入舊的Borland DLL
這段代碼中有一個規則引擎,我想在C#.NET應用程序中進行提取和使用。
問題是,如果我將規則引擎提取到它自己的DLL中,我希望能夠從既沒有時間移植的現有遺留代碼中調用此DLL,也從C#.NET中調用此DLL應用程序。
如果我建立使用舊的Borland編譯一個DLL,我不能工作了如何從C#.NET項目中引用它。 DllImport因BadImageFormatException而失敗。使用這個異常表明大多數人在編譯一個支持64位的程序並在其中加載32位內容時遇到了這個問題。事情是,我確信我正在生成16位DLL,並且似乎沒有解決方法。
我可以下載新的Borland 5編譯器具有32位編譯器和鏈接,但我仍然得到同樣的問題,所以也許我有一些錯誤也有。
這是我的C#調用代碼
[DllImport("C:\\NSDB\\BorlandDLL\\BorlandDLL.dll", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
static extern int Version();
public frmHelpAbout()
{
InitializeComponent();
lblIssueVersion.Text = + Version();
}
這是我的DLL的代碼
int Version()
{
return 93;
}
我的編譯器標誌和鏈接標誌都是完整的猜測 - 我希望這是我的主要問題
我發現我的DLL的代碼不飾有像__stdcall,爲extern「C」或什麼東西。我似乎無法找到Borland C++ 3.0能夠理解的一組正確的符號來強制我需要的那種調用約定。
所以,問題:
1)威爾的DllImport永遠能夠從Borland的C++ 3.0 1B)如果沒有生成的代碼工作,我就能端口與Borland的C + 5.5工作代碼.1編譯器,並獲得DllImport與該工作?
2)我可以解決問題嗎?如果我將DLL代碼移植到.NET中,我是否能夠獲得舊的Borland代碼來調用它?
3)你是否有任何其他的創新解決方案,可以讓我簡單地提取從我這個老Borland的項目需要的代碼?
我不認爲我可以做3 - 現在我必須保持現有程序的工作方式 - 並使用Borland的UI庫作爲控制檯。 我有一些代碼我與Borland coliming:外部的 「C」 INT __declspec(dllexport)的_stdcall的doAdd(INT I,詮釋J) { \t返回I + J; } 即使使用bcc32(我假設它是一個32位編譯器!)編譯並使用ilink32鏈接,我仍然無法獲得生成的DLL可加載。 如何知道生成的DLL是否真的是32位? – 2009-09-24 14:53:45
我必須有一些在編譯器選項錯誤。使用帶-WD選項的bcc32生成一個可加載的DLL。 – 2009-09-24 15:18:46