社区
进程/线程/DLL
帖子详情
一个dll中调用另一个dll的问题
arbend
2003-11-20 11:37:49
请教各路高人,在我的一个dll中去调用另一个由C开发的dll(硬件驱动)模块的函数时,出现“0xC0000005:Access Violation”问题,请问为什么?该怎么解决?急盼回复!
...全文
208
13
打赏
收藏
一个dll中调用另一个dll的问题
请教各路高人,在我的一个dll中去调用另一个由C开发的dll(硬件驱动)模块的函数时,出现“0xC0000005:Access Violation”问题,请问为什么?该怎么解决?急盼回复!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
command1980
2003-11-26
打赏
举报
回复
不好意思,找不出来问题,只能帮你顶一下了
arbend
2003-11-21
打赏
举报
回复
楼上的做法没有用,不知道错误的'string'指的是什么,我根本没有用到什么CString类
各位高人帮帮我呀!
hz张三
2003-11-21
打赏
举报
回复
string?
#include <string.h>
arbend
2003-11-21
打赏
举报
回复
谢伯虎兄!
原来我是这样做的,可是在extern "C"处报错:
error C2059: syntax error : 'string',
为什么?
bohut
2003-11-21
打赏
举报
回复
dll中要导出的函数这样申明:
#define DllExport _declspec(dllexport)
extern "C" DllExport int _stdcall Test(int n)
{
......
}
arbend
2003-11-21
打赏
举报
回复
Sorry,粘贴后变样了,上面定义NewCapture应该是这样的:
//在.c文件中定义了该函数
HWND _declspec(dllexport) NewCapture(int iWndID)
{
... //略去注册窗口类代码
hWnd = CreateWindow(...);//这里执行到消息处理过程,执行多个其他函数后,
//开始使用我们载入的Dll函数RGBCaptureInitialise ( &numberOfDevices ),就出错了
...//其他代码略去
}
arbend
2003-11-21
打赏
举报
回复
不好意思,代码比较长,只能截取相关代码,请大家多些耐心,有需要说明之处请告知。
俺对dll编程不很熟悉,有某些低级错误尽管指出,感谢!
//这里是俺做的Dll模块入口
BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)
{
HINSTANCE hInstanceRGBCapture;
hGlobalInstance = hInstance;
if(dwReason==DLL_PROCESS_ATTACH)
{
//载入我们要使用的Dll驱动文件
hInstanceRGBCapture = LoadAndLinkDLL ( );
if ( hInstanceRGBCapture == NULL )
{
return 0;
}
FreeLibrary ( hInstanceRGBCapture );
}
else if(dwReason=DLL_PROCESS_DETACH)
{
}
return 1;
}
//俺在.h文件中声明了本dll模块的一个输出函数,希望打开一个新窗口
#ifdef __cplusplus
extern "C" {
#endif
HWND _declspec(dllexport) NewCapture(int iWndID);
#ifdef __cplusplus
}
#endif
//在.c文件中定义了该函数
HWND _declspec(dllexport) NewCapture(int iWndID)
{
... //略去注册窗口类代码
hWnd = CreateWindow(...);//这里执行到消息处理过程,执行多个其他函数后,
//开始使用我们载入的Dll函数RGBCaptureInitialise ( &numberOfDevices ),就出错了
}
//下面是装载Dll驱动文件的函数,顺利执行。其中APIFNENTRY结构定义如下:
/*********************
typedef struct
{
#if 1
FARPROC *PFnPtr;
LPCSTR FnName;
#else
APIFN *PFnPtr;
char *FnName;
#endif
} APIFNENTRY, FAR *LPAPIFNENTRY, FAR *LPAPIFNLIST;
************************/
HMODULE LoadAndLinkDLL()
{
APIFNENTRY FnList[] =
{
#define API(type,modifier,name,args) \
{ (FARPROC *)&name, #name },
#include "rgbcacc.h"
#undef API
{ NULL, NULL }
};
char nameOfDLL[_MAX_PATH];
LONG lError;
HKEY hKey;
HMODULE hDLL;
lError = RegOpenKey ( HKEY_LOCAL_MACHINE, RegistryKeyName, &hKey );
if ( lError == ERROR_SUCCESS )
{
DWORD dwType;
DWORD dwLength;
dwType = REG_SZ;
dwLength = sizeof ( nameOfDLL );
lError = RegQueryValueEx ( hKey, RGBCaptureDLLName, NULL,
&dwType, (LPBYTE)nameOfDLL, &dwLength );
RegCloseKey ( hKey );
}
if ( lError != ERROR_SUCCESS )
{
MessageBox ( NULL, "Unable to read path from Registry.", NULL,
MB_OK | MB_ICONERROR );
return NULL;
}
hDLL = LoadLibrary ( nameOfDLL );
if ( hDLL == NULL )
{
char text[80];
wsprintf("Unable to load %s", nameOfDLL);
MessageBox ( NULL, text, NULL,
MB_OK | MB_ICONERROR );
return NULL;
}
//这里载入用到的Dll函数,执行没有问题
if ( !APILoadFunctions ( hDLL, FnList, "" ))
{
char text[80];
wsprintf(text, "Incompatible version of %s", nameOfDLL);
MessageBox ( NULL, text, NULL,
MB_OK | MB_ICONERROR );
return NULL;
}
return hDLL;
}
//俺定义的APILoadFunctions()函数如下(LPAPIFNLIST在上面说明):
int APILoadFunctions (
HINSTANCE hInstance,
LPAPIFNLIST lpFnList,
void *pReserved )
{
int i = 0;
while ( lpFnList[i].PFnPtr )
{
*lpFnList[i].PFnPtr = GetProcAddress ( hInstance, lpFnList[i].FnName );
if ( *lpFnList[i].PFnPtr == NULL )
{
return FALSE;
}
i++;
}
return TRUE;
}
arbend
2003-11-21
打赏
举报
回复
还是没有解决,是不是dll导出函数编写有问题?请指教
arbend
2003-11-21
打赏
举报
回复
怎么没人顶上?
command1980
2003-11-20
打赏
举报
回复
前几天遇到同样一个问题,就是内存越界,这得要看你的原码了
ljzcom
2003-11-20
打赏
举报
回复
把代码贴出来。。
xiaohyy
2003-11-20
打赏
举报
回复
内存访问违规,是由无效指针引起的,把代码贴出来。。
arbend
2003-11-20
打赏
举报
回复
请大家帮我 :(
java
调用
vc
dll
,
问题
从VC
中
的另
一个
dll
调用
dll
中
的方法
我正在尝试使用c#在移动应用程序5.0的Vc智能项目
中
构建
一个
win
DLL
在我的
DLL
中
从另
一个
DLL
调用
的方法 .我在
dll
项目
中
进行了以下设置:工具 - >选项 - > vc目录platform-> windows mobile 5.0 sdk设置相应的include和lib路径 .设置lib文件如下:项目属性 - >链接器 - >输入 - >其他依赖项在...
MFC程序
调用
Dll
中
的对话框资源
MFC程序
调用
Dll
中
的对话框资源 以非模态显示
调用
DLL
文件
中
的对话框_
一个
DLL
的能成功_
一个
DLL
不能成功
Dll
DialogTest VS2010写的
一个
基于对话框的MFC程序 然后创建两个常规动态
DLL
文件 在
DLL
文件
中
分别添加对话框
一个
DLL
的对话框能正常
调用
另
一个
不行 均为非模态
调用
....
dll
静态
调用
-修改lib
中
dll
名称就能改变
调用
dll
的名称
同名
dll
内容不一致,冲突,修改其
中
一个
lib的内容改变
dll
名称。修改lib
中
dll
名称就能改变
调用
dll
的名称
VS2015+opencv+realsense的
DLL
打包和
调用
VS2015+opencv3.3.1+realsense2的
DLL
打包和
调用
DLL
打包
DLL
调用
如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成
一个
适合你的列表创建
一个
表格设定内容居
中
、居左、居右SmartyPants创建
一个
自定义列表如何创建
一个
注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
DLL
打包 我们...
VS2010 c++生成和
调用
dll
例子
参考 http://blog.csdn.net/big_wang5/article/details/8216557 c++新手 一、
DLL
简介 包含能被可执行程序或其他
DLL
调用
的函数。动态链接提供了一种方法,使进程可以
调用
不属于其可执行代码的函数。函数的可执行代码位于
一个
DLL
中
,该
DLL
包含
一个
或多个已被编译、链接并与使用它们的进程分开存储的函数。 若
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章