这个是代码:
/* 文件名:dll.h*/
#ifndef DLL_H
#define DLL_H
extern "C" int_declspce(dllexport)add(int x,int y);
#endif/*文件名:dll.cpp*/
#include"dll.h"
int add(int x,int y)
{
return x+y;
}
//报错:1>------ 已启动生成: 项目: dll, 配置: Debug Win32 ------
1>正在编译...
1>dll.cpp
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C2065: “dllexport”: 未声明的标识符
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C2146: 语法错误 : 缺少“;”(在标识符“add”的前面)
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>生成日志保存在“file://e:\颖猪猪的学习园地\DLL\dll\dll\Debug\BuildLog.htm”
1>dll - 4 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========第二个工程中的调用文件:
#include<stdio.h>
#include<windows.h>
typedef int(*lpAddFun)(int,int);
int main(int argc,char*argv[])
{
HINSTANCE hDll;//DLL句柄
lpAddFun addFun;//函数指针
hDll=LoadLibrary()
}//报错: 1>------ 已启动生成: 项目: dllCall, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(8) : error C2660: “LoadLibraryW”: 函数不接受 0 个参数
1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(9) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>生成日志保存在“file://e:\颖猪猪的学习园地\DLL\dll\dllCall\Debug\BuildLog.htm”
1>dllCall - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
麻烦了!!!谢谢~~
/* 文件名:dll.h*/
#ifndef DLL_H
#define DLL_H
extern "C" int_declspce(dllexport)add(int x,int y);
#endif/*文件名:dll.cpp*/
#include"dll.h"
int add(int x,int y)
{
return x+y;
}
//报错:1>------ 已启动生成: 项目: dll, 配置: Debug Win32 ------
1>正在编译...
1>dll.cpp
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C2065: “dllexport”: 未声明的标识符
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C2146: 语法错误 : 缺少“;”(在标识符“add”的前面)
1>e:\颖猪猪的学习园地\dll\dll\dll\dll.h(4) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>生成日志保存在“file://e:\颖猪猪的学习园地\DLL\dll\dll\Debug\BuildLog.htm”
1>dll - 4 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========第二个工程中的调用文件:
#include<stdio.h>
#include<windows.h>
typedef int(*lpAddFun)(int,int);
int main(int argc,char*argv[])
{
HINSTANCE hDll;//DLL句柄
lpAddFun addFun;//函数指针
hDll=LoadLibrary()
}//报错: 1>------ 已启动生成: 项目: dllCall, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(8) : error C2660: “LoadLibraryW”: 函数不接受 0 个参数
1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(9) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>生成日志保存在“file://e:\颖猪猪的学习园地\DLL\dll\dllCall\Debug\BuildLog.htm”
1>dllCall - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
麻烦了!!!谢谢~~
解决方案 »
- 哥们,MFC入门咋就那么难呢?(来点实际点)
- shp文件添加入ArcGlobe中如何3D显示
- 关于socket connect函数和IOCP的问题
- 怎么能把数据库的xml类型导出到文件?
- SQLExecDirect执行后没有返回结果集
- 编译时又碰到问题了 请帮帮忙啊
- 什么函数可以给char[128]类型的变量增加字符串?
- 我的 Date and Time Picker Control 运行起来为何看不见
- windows shell编程主要用在哪里?shell提供的api和windows api什么关系?windows api能实现所有的shell api吗?
- IE Programming,高手请进
- 关于钩子在奇迹中模拟按键问题
- 如何点击DataGird控件的记录进行删除
改为extern "C" int _declspec(dllexport)add(int x,int y);
改为hDll=LoadLibrary(路径+dll)
注意参数和语句结束的分号。多看编译器提示的错误,根据错误进行修改即可。
#include<stdio.h>
#include<windows.h>
typedef int(*lpAddFun)(int,int);//宏定义函数指针
int main(int argc,char*argv[])
{
HINSTANCE hDll;//DLL句柄
lpAddFun addFun;//函数指针
hDll=LoadLibrary("..\\Debug\\dllTest.dll");
if(hDll != NULL)
{
addFun=(lpAddFun)GetProcAddress(hDll,"add");
if(addFun != NULL)
{
int result = addFun(2,3);
printf("%d",result);
}
FreeLibrary(hDll); }
return 0;
}1>------ 已启动生成: 项目: dllCall, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(8) : error C2664: “LoadLibraryW”: 不能将参数 1 从“const char [21]”转换为“LPCWSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>生成日志保存在“file://e:\颖猪猪的学习园地\DLL\dll\dllCall\Debug\BuildLog.htm”
1>dllCall - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
因为你是Unicode的工程,而你输入的字符串是ANSI的。
改为hDll=LoadLibrary(_T("..\\Debug\\dllTest.dll"));
一般不这么直接写字符串,因为调用的Dll一般和exe在同一目录。一般这么写:
TCHAR szPath[MAX_PATH] = {0};
DWORD dwRet = GetModuleFileName(NULL, szPath, MAX_PATH);
if(!dwRet)
return;
CString path(szPath);
path = path.Left(path.ReverseFind(_T('\\')));
path += _T("\\dllTest.dll");
hDll=LoadLibrary(path);
TCHAR * Arg = argv[0];
CString path(Arg);
path = path.Left(path.ReverseFind(TCHAR('\\')));
path += _T("\\vpncheck.dll");
hDll=LoadLibrary(path);
TCHAR * Arg = argv[0];
CString path(Arg);
path = path.Left(path.ReverseFind(TCHAR('\\')));
path += _T("\\vpncheck.dll");
hDll=LoadLibrary(path);
是吗?
编译后说找不到标识符:
1>------ 已启动生成: 项目: dllCall, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(8) : error C3861: “_T”: 找不到标识符
1>生成日志保存在“file://e:\颖猪猪的学习园地\DLL\dll\dllCall\Debug\BuildLog.htm”
1>dllCall - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
直接替换成了 LoadLibraryA,编译通过了 但是有两个 warning....1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(8) : warning C4551: 缺少参数列表的函数调用
1>e:\颖猪猪的学习园地\dll\dll\dllcall\main.cpp(9) : warning C4700: 使用了未初始化的局部变量“hDll”不知道有没有影响呢??
注意L之后没有括号
使用_T()的话加头文件tchar.h