2014-06-27 59 views
0

我正在嘗試爲Profilab創建模塊(dll)。對於工作,在實例尋找C++ Builder時應該有出口名稱列表,示例使用_stdcall將更改dll中導出函數的名稱

// return number of inputs 
unsigned char NumInputs() 

,它的聲明如下

extern "C" __declspec(dllexport) unsigned char _stdcall NumInputs(); 

當我同樣的方式宣告它在Visual Studio (?)2013特快C++項目,我越來越像出口這個名字(用的Dependency Walker檢查):

[email protected] 

不作品Profilab

刪除_stdcall部分將生成專有名稱(NumImputs),但軟件會崩潰,我認爲是由於缺少_stdcall部分。

我該怎麼辦?如何導出NumInputs並同時有_stdcall

回答

1

用正確的調用約定(stdcall)定義函數。

因此,你不會崩潰。

儘管如此,您還需要正確的名稱或不會鏈接,因此use a def-file明確列出了使用什麼名稱(如果有)和/或指定序號應導出哪個函數。

LIBRARY BTREE 
EXPORTS 
    Insert @1 
    Delete @2 
    Member @3 
    Min @4 

本示例從鏈接文檔複製而來。所有的出口報表都遵循這種模式:

entryname[=internalname] [@ordinal [NONAME]] [[PRIVATE] | [DATA]] 
+0

什麼是ABI?如何在def-file中定義函數的名稱?如果我理解正確,名稱已經存在於obj文件中,甚至有人聲明「__declspec(dllexport)」def文件過時了。你能否延長你的答案?例如,將名稱從「_NumInputs @ 0」更改爲「NumInputs」。 – Sinatr

+0

在文檔中添加了一個示例,並且更加鬆散。 – Deduplicator

+0

我創建了def文件,將其添加到項目並設置[鏈接器選項](http://msdn.microsoft.com/en-us/library/34c30xs1.aspx)。它現在有用,謝謝! – Sinatr