頭檔案.h
#ifndef _ILBC_H
#define _ILBC_H
#include <mmsystem.h>
//宏定義,如果系統沒有宣告WINAPI,則進行宣告,_stdcall為標準呼叫方式
#ifndef WINAPI
#define WINAPI _stdcall
#endif
//////////////////////////////////////////
#ifdef __iLBC_DLL_IMPORT
#include "iLBC_encode.h"
#include "iLBC_decode.h"
iLBC_Enc_Inst_t iLBCenc_inst;
iLBC_Dec_Inst_t iLBCdec_inst;
#define iLBC_API(type, name , args) \
extern "C" type __declspec(dllexport) WINAPI name args;
#else
#define iLBC_API(type, name , args) \
extern "C" type __declspec(dllimport) WINAPI name args;
#endif
///////////////////////////////////////////////////////////////////
iLBC_API(bool, ilbc_init, ());
iLBC_API(int, ilbc_encoder, (short *pin,unsigned char *pout));
iLBC_API(int, ilbc_decoder, (unsigned char *pin,short *pout));
#endif
cpp檔案關鍵代碼
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
....//代碼
return TRUE;
}
bool WINAPI ilbc_init()
{
........
}
int WINAPI ilbc_encoder(short *pin,unsigned char* pout)
int WINAPI ilbc_decoder(unsigned char *pin ,short *pout)
生成一個lib和一個dll
我自己新建了另外一個dll專案 想引入這個lib 引入后。應該怎么呼叫?
我是c++ 小白 找了多資料還是不懂。各位大神們。求解答!
或者給我一個可以直接呼叫的iLBC.lib也行 告訴我怎么用!
最后30分了。求解!
uj5u.com熱心網友回復:
dll 放在 exe 同一個檔案夾lib 要在 編譯器里 想方設法 引入
呼叫點 的 檔案 要 擴入 函式的宣告 或者 直接 include 你的 export 函式的 .h 檔案
uj5u.com熱心網友回復:
庫檔案(.lib)分兩種,一種是動態庫(.dll)的匯入庫,一種是靜態庫(包含實作部分),看起來你用的是第一種。那么在你的工程中,包含了這個lib庫對應的頭檔案以后,再把Lib檔案添加到工程中就可以直接使用其中的函式了(Project-->Add to project)
uj5u.com熱心網友回復:
#include "iLBC.h"#pragma link "iLBC.lib" //有了這行,就是告訴link程式,鏈接時加入iLBC.lib。把Lib檔案添加到工程中作用也一樣。
uj5u.com熱心網友回復:
#include "ilbc.h"
lib我是在專案屬性中參考進去的。。
這樣做還是會報錯。
錯誤 2 error LNK2019: 無法決議的外部符號 __imp__ilbc_encoder@8,該符號在函式 "protected: void __thiscall CRecodeSound::OnSoundData(unsigned int,long)" (?OnSoundData@CRecodeSound@@IAEXIJ@Z) 中被參考 E:\1.WPF學習實體\VideoCapture\VideoCapture\RecodeSound.obj VideoCapture
錯誤 1 error LNK2019: 無法決議的外部符號 __imp__ilbc_init@0,該符號在函式 "public: __thiscall CRecodeSound::CRecodeSound(class CDialog *)" (??0CRecodeSound@@QAE@PAVCDialog@@@Z) 中被參考 E:\1.WPF學習實體\VideoCapture\VideoCapture\RecodeSound.obj VideoCapture
uj5u.com熱心網友回復:
我很奇怪就是為什么會這樣報錯。我看過一個資料。 說有可能是編譯方法 運行庫 什么地不一致造成的。。
我剛才也看了下。 倆個都是靜態庫編譯 多執行緒除錯mtd 還是報錯、。。
uj5u.com熱心網友回復:
error LNK2005: "void __cdecl _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invalid_parameter@@YAXPBG00II@Z) 已經在 libcmtd.lib(invarg.obj) 中定義error LNK2005: ___pInvalidArgHandler 已經在 libcmtd.lib(invarg.obj) 中定義
error LNK2005: __call_reportfault 已經在 libcmtd.lib(invarg.obj) 中定義
error LNK2005: __get_invalid_parameter_handler 已經在 libcmtd.lib(invarg.obj) 中定義
error LNK2005: __invalid_parameter 已經在 libcmtd.lib(invarg.obj) 中定義
這樣的錯誤是什么意思?
uj5u.com熱心網友回復:
我現在有一個iLBC.lib 參考進去后 就報錯、 報錯內容在6樓!
但是我一直找不到錯誤的原因!! 查了一些資料也還是不知道怎么解決這個錯誤!!
uj5u.com熱心網友回復:
相當于重復定義只不過發生在鏈接時
uj5u.com熱心網友回復:
頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂uj5u.com熱心網友回復:
我在專案的屬性中參考了這個lib(指定了lib的檔案夾) 代碼檔案里也參考了一次。 就這個錯誤。
如果我在代碼中不寫這個#pragma co .. ilbc.lib 的話 。 他就會報找不到函式錯誤!
uj5u.com熱心網友回復:
不太清楚 你用的 是什么 編譯器,C++Builder 中的 話 直接 Add 就可以
VS 的話, 得在 什么工程屬性里 設定,
C++Builder 的話 還可以
#pragma link "***.lib"
的方式
uj5u.com熱心網友回復:
這個lib.如果是不同版本的BCB或其他編譯器編譯的LIB,最好用當前版本CB重新編譯.微軟的LIB不能直接在CB中用。
uj5u.com熱心網友回復:
我是在vs2010中開發的。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/124445.html
標籤:基礎類
上一篇:求助:mfc應用程式運行后報錯
下一篇:多年后重拾編程,碰到難題:如何實作將QQ對話框的圖片物件拖動到程式界面的Timage控制元件(或其他控制元件)并顯示、進行下一步處理
