当前位置:首页 » 编程软件 » vc自制动态库编译器

vc自制动态库编译器

发布时间: 2022-08-09 17:18:11

① vc++6.0编译

#include<iostream.h>//你这里错了。把#inlcude<iostream.h>写成#include<iostream.>
#include"Sales_item.h"
main()
{
Sales_item book;
std::cin>>book;
std::cout<<book<<std::endl;
return 0;
}
改后如果还有错误,请你把全部代码发在上面。代码补全才能知道你那里错了!!!

② VC程序调用动态库,编译时候也跟着编译动态库

不太清楚你的工程是如何建立的,想必一个工程是生成动态链接库,另一个是调用程序EXE了。由于VC动态库有两种形式,Regular和Extended两种,其中一种能导出类,另一种只能导出变量和函数。如果导出的是类,你在编译EXE文件时自然需要用到类得声明文件,即你前面所说的动态库本身所引用的文件。如果导出的是函数或变量,有可能出现的情况是:一般为了代码的重用性,把需要导出的函数或变量单独放在一个头文件中,用一个宏控制其导入、导出。编译动态库时,宏定义为导出,编译EXE时,宏变为导入,这个头文件为两者共用。如果不小心在这个头文件中包含了其他头文件,也可能出现你说的情况。如果动态库调用直接采用函数入口地址的方法,则什么都不用声明,当然,只适用于导出函数与变量的情形。

③ 使用VC++2008编译exosip的动态库文件dll遇到无法解析的外部符号问题。

产生这些错误是因为需要用到的一些函数在osip库在def文件中没导出。需要修改\libosip2-3.6.0\platform\vsnet目录下面的osip2.def、osipparser2.def两个文件,在文件的末尾导出这些函数,具体如下:
osip2.def:
osip_transaction_set_naptr_record @138

osipparser2.def:
osip_realloc @416
osip_strcasestr @417
__osip_uri_escape_userinfo @418

④ 如何在vc中使用mingw编译出来的动态库和静态库

mingw编译出来的静态库后缀名为.a,编译出来的动态库的导入库后缀名为.dll.a,而在windows下后缀名为.lib的库可能是静态库也可能是动态库的导入库。

mingw编译出来的动态库的导入库可以直接在vc中直接使用,例如

#pragma comment(lib, "libx264.dll.a")

这样你就不需要生成一个.lib后缀的动态库的导入库了,网上也有如何从.dll生成.lib的方法。

如果链接了动态库的导入库libpthread.dll.a,你发布的应用程序就要带上pthread的dll。
使用静态库的好处是发布的应用程序组件模块里不需要带上相关的dll,如果要使用mingw编译出来的静态库,可以如下:

#pragma comment(lib, "libx264.a")

但是仅仅链接这么一个静态库是不够的,你还需要链接

libgcc.a

libmingwex.a

你可能还需要链接libmsvcrt.a

否则会报一堆错误:error LNK2001: 无法解析的外部符号

上面的这些库在C:\MinGW\lib目录或子目录下面可以找到。

链接这些库的原因是mingw使用的gcc编译器和vc编译器之间存在差异

⑤ 怎样让vc++6.0生成64位的动态链接库

1.静态链接库与动态链接库区别:静态链接库:lib中的指令被直接包含在最终生成的EXE文件中。动态链接库:dll不必被包含在最终的EXE中,EXE文件执行时可以动态地引用和卸载DLL文件。同时,静态链接库中不能再包含其他的动态链接库或静态库,而动态链接库中可以包含其他的动态或静态库。2.VC++支持的DLL:DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。3.导出函数的声明方式:一种在函数声明类型和函数名之间加上“_declspec(dllexport)”。另外一种采用模块定义(.def)文件声明,需要在库工程中添加模块文件,格式如下:LIBRARY 库工程名称EXPORTS 导出函数名4.DLL的调用方式:一种静态调用,由编译系统完成对DLL的加载和应用程序结束时DLL的卸载。另外一种动态调用,由编程者用API函数加载和卸载DLL(DLL加载—DLL函数地址获取—DLL释放)方式。5.所有库工程编译时必须Release方式:Build—set active configuration—选择库工程的release方式6.示例:一、 函数----创建动态链接库(MFC规则DLL)1. New--projects--MFC AppWizard(dll)--Regular DLL using shared MFC DLL //取名为MFC_dll2. def文件中添加:函数名(Add_new)3. h文件中添加:外部函数声明//求和函数,函数名为Add_newextern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b);4. cpp文件中添加: 外部函数实现extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b){return a+b;}5. build--set active configuration--win32 release--ok6. 生成7. 根目录下release文件夹中dll,lib与根目录下h文件即为所需二、 函数----调用动态链接库(把MFC_dll.dll和MFC_dll.lib拷到工程所在目录)//静态调用(.h可以写到.cpp文件中)1. new--projects--win32 console application--an empty project2. 添加h文件:(test.h)#pragma comment(lib,"MFC_dll.lib") //告诉编译器DLL相对应的lib文件所在路径和文件名extern "C" _declspec(dllimport) int _stdcall Add_new(int a,int b);//声明导入函数3. 添加cpp文件:(main.cpp)#include "test.h"int main(){cout<<Add_new(10,3);return 0;}//动态调用#include <stdio.h>#include <windows.h>typedef int (* lpAddFun)(int ,int);//定义一个与Add_new函数接受参数类型和返回值均相同的函数指针类型int main(){HINSTANCE hDll;//句柄lpAddFun addFun;//函数指针hDll=LoadLibrary("dllTest.dll");//动态加载DLL模块句柄if(hDll){addFun=(lpAddFun) GetProcAddress(hDll,"Add_new");//得到所加载DLL模块中函数的地址if(addFun){int result=addFun(2,3);printf("%d",result); } FreeLibrary(hDll);//释放已经加载的DLL模块}return 0;}三、 变量----创建动态链接库(非MFC DLL)1. new---projects---win32 dynamic-link library----an empty project(Sample)2. 添加sample.h#ifndef SAMPLE_H#define SAMPLE_Hextern int dllGlobalVar;#endif3. 添加 sample.cpp#include "sample.h"#include <windows.h>int dllGlobalVar;bool APIENTRY DllMain(HANDLE hMole,DWORD ul_reason_for_call,LPVOID lpReserved)//windows在加载DLL时,需要一个入口函数,就如同控制台或DOS程序需要main函数、win32程序需要winmain函数一样。所以引入一个不做任何操作的缺省DllMain的函数版本。是DLL的内部函数。

⑥ VC 编写动态库 dllmain问题

函数错误
add.cppG:\实践\ DLL\ add.cpp(8):错误C2146:语法错误:缺少';'在标识符“APIENTRY'G的:\实践\ DLL\补充。 CPP(8):错误C2501:“BOOL”:缺少0存储类或类型specifiersG的:\实践\ DLL\ add.cpp(8):致命错误C1004:意外结束文件foundError执行cl.exe.add.obj的的

⑦ VC 自己编写动态库链接时出现问题

1:
extern int dllGlobalVar;意思是说这个全局变量是在外部定义的
2:
目测你是从网上直接的代码吧,有可能是含有不可见的特殊字符了,你可以删除没行行尾的所有字符,或者你自己照着这个手打一次,保证没错误了。

⑧ c++动态链接的声明和实现函数 怎么做成动态链接库

你要建立dll的工程项目,如果是建立动态链接库的话,我可以发给你一个模板,请参考。
.cpp
#define DLL_ALGRATHM
#include "algrithmdll.h"

//从内存中读取图像数据
DLL_API IplImage* WINAPI loadimage( char* data,float width,float height)
{

}
.h文件

#pragma once;
#ifdef DLL_ALGRATHM
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
#include <Windows.h>extern "C" {
DLL_API IplImage* WINAPI loadimage(char* data,float width,float height);
}

热点内容
专网数据存储安全问题分析 发布:2024-05-04 07:33:28 浏览:130
如何获得打印机无线密码 发布:2024-05-04 06:44:59 浏览:417
上古诸神录哪里改密码 发布:2024-05-04 06:43:55 浏览:262
灌篮高手手游自动盖帽脚本 发布:2024-05-04 06:42:31 浏览:424
javajs引擎 发布:2024-05-04 06:37:33 浏览:797
javalist重复 发布:2024-05-04 06:19:27 浏览:510
max脚本管理 发布:2024-05-04 06:02:31 浏览:45
自行搭建服务器 发布:2024-05-04 06:01:12 浏览:126
h3c如何查看所有配置 发布:2024-05-04 05:26:39 浏览:493
java统计字符串中字母个数 发布:2024-05-04 05:22:58 浏览:888