关于xxx.lib 引入调用的问题

渴死的鱼都被人用了啊 2014-04-17 06:35:55
头文件.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分了。求解!
...全文
344 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 16 楼 PPower 的回复:
这个lib.如果是不同版本的BCB或其他编译器编译的LIB,最好用当前版本CB重新编译. 微软的LIB不能直接在CB中用。
我是在vs2010中开发的。。
勉励前行 2014-04-18
  • 打赏
  • 举报
回复
这个lib.如果是不同版本的BCB或其他编译器编译的LIB,最好用当前版本CB重新编译. 微软的LIB不能直接在CB中用。
MonkeyKingMKY 2014-04-18
  • 打赏
  • 举报
回复
不太清楚 你用的 是什么 编译器, C++Builder 中的 话 直接 Add 就可以 VS 的话, 得在 什么工程属性里 设置, C++Builder 的话 还可以 #pragma link "***.lib" 的方式
  • 打赏
  • 举报
回复
引用 11 楼 MonkeyKingMKY 的回复:
相当于重复定义 只不过发生在链接时
引用 1 楼 MonkeyKingMKY 的回复:
dll 放在 exe 同一个文件夹 lib 要在 编译器里 想方设法 引入 调用点 的 文件 要 扩入 函数的声明 或者 直接 include 你的 export 函数的 .h 文件
我在项目的属性中引用了这个lib(指定了lib的文件夹) 代码文件里也引用了一次。 就这个错误。 如果我在代码中不写这个#pragma co .. ilbc.lib 的话 。 他就会报找不到函数错误!
MonkeyKingMKY 2014-04-18
  • 打赏
  • 举报
回复
相当于重复定义 只不过发生在链接时
dfdsfa123 2014-04-18
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
  • 打赏
  • 举报
回复
引用 1 楼 MonkeyKingMKY 的回复:
dll 放在 exe 同一个文件夹 lib 要在 编译器里 想方设法 引入 调用点 的 文件 要 扩入 函数的声明 或者 直接 include 你的 export 函数的 .h 文件
我现在有一个iLBC.lib 引用进去后 就报错、 报错内容在6楼! 但是我一直找不到错误的原因!! 查了一些资料也还是不知道怎么解决这个错误!!
  • 打赏
  • 举报
回复
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) 中定义 这样的错误是什么意思?
  • 打赏
  • 举报
回复
我很奇怪就是为什么会这样报错。 我看过一个资料。 说有可能是编译方法 运行库 什么地不一致造成的。。 我刚才也看了下。 俩个都是静态库编译 多线程调试mtd 还是报错、。。
  • 打赏
  • 举报
回复
引用 3 楼 PPower 的回复:
#include "iLBC.h" #pragma link "iLBC.lib" //有了这行,就是告诉link程序,链接时加入iLBC.lib。把Lib文件添加到工程中作用也一样。
#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
勉励前行 2014-04-17
  • 打赏
  • 举报
回复
#include "iLBC.h" #pragma link "iLBC.lib" //有了这行,就是告诉link程序,链接时加入iLBC.lib。把Lib文件添加到工程中作用也一样。
ccrun.com 2014-04-17
  • 打赏
  • 举报
回复
库文件(.lib)分两种,一种是动态库(.dll)的导入库,一种是静态库(包含实现部分),看起来你用的是第一种。 那么在你的工程中,包含了这个lib库对应的头文件以后,再把Lib文件添加到工程中就可以直接使用其中的函数了(Project-->Add to project)
MonkeyKingMKY 2014-04-17
  • 打赏
  • 举报
回复
dll 放在 exe 同一个文件夹 lib 要在 编译器里 想方设法 引入 调用点 的 文件 要 扩入 函数的声明 或者 直接 include 你的 export 函数的 .h 文件
设备树(device tree)机制是Linux内核从linux-3.x版本开始引进的一种机制,目的是解决内核源码的arch/arm目录下代码混乱的问题:随着ARM生态的快速发展,在内核源码的arch/arm目录下,存放着几十种arm芯片和几百个开发板相关的源文件,很多开发板和处理器的中断、寄存器等相关硬件资源都在这个目录下以.c或.h的文件格式定义。而对于内核来说,与这些硬件耦合,会导致内核代码混乱不堪,每个开发板上运行的内核镜像都必须单独编译配置,无法通用。什么时候Linux内核能像Windows镜像那样,无论你的电脑什么配置,一个Windows安装包,都可以直接下载安装运行呢?设备树机制,实现了Linux内核和硬件平台的解耦:每个硬件平台的硬件资源使用一个设备树文件(xxx.dts)来描述,而不是在arch/arm下以.c 或 .h 文件来定义。Linux内核是一个通用的内核,在启动过程中,在通过解析设备树中的硬件资源来初始化某个具体的平台。 引入设备树后,很多和内核驱动开发的工作也发生了变化:以往驱动工程师关注的头文件宏定义、寄存器定义,现在这些基本上不用关注,关注的重点则转向了如何根据硬件平台去配置和修改设备树文件。很多驱动的编程接口也发生了变化,开始慢慢使用device tree提供的编程接口去开发驱动。本期课程主要面向嵌入式开发人员,分享Linux下驱动开发所需要的设备树知识和必备技能

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧