三種不同的解決辦法(原理可能是一樣的, :) ):
1 )在匯出函式宣告之前加上__declspec ( dllexport ) 。例:
__declspec ( dllexport ) int add ( int a , int b );
__declspec ( dllexport ) int sub ( int a , int b );
__declspec ( dllexport ) int mul ( int a , int b );
__declspec ( dllexport ) int div ( int a , int b );
#pragma comment ( linker , "/export:_add,@1,noname" )
#pragma comment ( linker , "/export:_sub,@2,noname" )
#pragma comment ( linker , "/export:_mul,@3,noname" )
#pragma comment ( linker , "/export:_div,@4,noname" )
3 )新增乙個def檔案,例:
exports
add @1 noname
sub @2 noname
mul @3 noname
div @4 noname
/ def : callee . def
注意:在def檔案中不要有
library [ library ][ base = address ]
這樣的語句。
相比較而言,後兩種方法可以設定更多的引數。
函式舉例:
extern "c"
int add ( int a , int b )
return ( a + b );
int sub ( int a , int b )
return ( a - b );
int mul ( int a , int b )
return ( a * b );
int div ( int a , int b )
if ( b == 0 )
return 0 ;
else
return ( a / b );
編譯時會自動生成相應的匯出庫(lib)檔案,供呼叫者使用。
呼叫方法和普通的動態鏈結庫呼叫一樣。
呼叫者必須能夠找到被呼叫者的位置,否則報錯,被呼叫者是否執行不影響。
呼叫**舉例:
extern "c"
int add ( int a , int b );
int sub ( int a , int b );
int mul ( int a , int b );
int div ( int a , int b );
#pragma comment ( lib , "callee.lib" )
void ccallerdlg :: onbnclickedcalculate ()
// todo: add your control notification handler code here
updatedata ( true );
switch ((( ccombobox *) getdlgitem ( idc_combo_operator ))-> getcursel ())
case add :
m_iresult = add ( m_inum1 , m_inum2 );
break ;
case sub :
m_iresult = sub ( m_inum1 , m_inum2 );
break ;
我在od中跟了一下,發現這跟呼叫動態鏈結庫也差不多。
003810f0 > 8b4424 08 mov eax , dword ptr [ esp + 8 ]
003810f4 8b4c24 04 mov ecx , dword ptr [ esp + 4 ]
003810f8 03c1 add eax , ecx
003810fa c3 retn
003810fb cc int3
003810fc cc int3
003810fd cc int3
003810fe cc int3
003810ff cc int3
00381100 > 8b4424 04 mov eax , dword ptr [ esp + 4 ]
00381104 2b4424 08 sub eax , dword ptr [ esp + 8 ]
00381108 c3 retn
00381109 cc int3
0038110a cc int3
0038110b cc int3
0038110c cc int3
0038110d cc int3
0038110e cc int3
0038110f cc int3
00381110 > 8b4424 04 mov eax , dword ptr [ esp + 4 ]
00381114 0faf4424 08 imul eax , dword ptr [ esp + 8 ]
00381119 c3 retn
0038111a cc int3
0038111b cc int3
0038111c cc int3
0038111d cc int3
0038111e cc int3
0038111f cc int3
00381120 > 8b4c24 08 mov ecx , dword ptr [ esp + 8 ]
00381124 85c9 test ecx , ecx
00381126 75 03 jnz short 0038112b
00381128 33c0 xor eax , eax
0038112a c3 retn
還不知道是什麼原因。
texi格式檔案
ffmpeg自帶文件及示例程式,存放在doc目錄下,文件對ffmpeg各個模組都有說明。發現乙個問題,很文件擴充套件名為 texi,如ffplay.texi ffmpeg.texi等。用文字編輯器開啟,發現其中多了一些特殊的標記,在ubuntu乙個命令texi2html,可以將 texi檔案轉換成h...
texi格式檔案
ffmpeg自帶文件及示例程式,存放在doc目錄下,文件對ffmpeg各個模組都有說明。發現乙個問題,很文件擴充套件名為 texi,如ffplay.texi ffmpeg.texi等。用文字編輯器開啟,發現其中多了一些特殊的標記,在ubuntu乙個命令texi2html,可以將 texi檔案轉換成h...
tsv csv格式檔案
逗號分隔值 comma separated values,csv,有時也稱為字元分隔值,因為分隔字元也可以不是逗號 其檔案以純文字形式儲存 資料 數字和文字 純文字意味著該檔案是乙個字串行,不含必須像二進位制數字那樣被解讀的資料。csv檔案由任意數目的記錄組成,記錄間以某種換行符分隔 每條記錄由欄位...