下边是dll的.h文件中对DL_Initial的注释和原型声明:/*==============================================================
函数: DL_Initial
功能: 初始化设备,返回设备句柄
参数: hDevice 函数调用成功则返回设备句柄,用于调用其他API函数
hWnd 主窗口的句柄,用来接收WM_CAPTURE,WM_EXITBTNDOWN等消息
nCom 使用的COM端口号,默认为COM1
说明: 此函数的每一次调用,都要有DL_UnInitial相对应,当返回DL_SUCCESS时表示函数
调用成功,hDevice是返回给用户设备句柄。这个句柄将作为其他API函数的参数。
--------------------------------------------------------------*/
DLCWB_API int __stdcall DL_Initial( OUT HANDLE *hDevice, HWND hWnd, int nCom = 1 );下边是我在C**Dlg.cpp的OnInint()函数中对上边库函数的动态调用,其中有好多语句可以砍掉,是我为了
测试而加的:
HANDLE *hDevice1=new HANDLE ;
if(hDevice1==0)
{
MessageBox("内存分配失败");
}
hInst=LoadLibrary("DLCWB.Dll");//动态加载dll
typedef int (*ADDPROC)(OUT HANDLE *hDevice,HWND hWnd,int nCom=1);//定义函数指针类型
ADDPROC DL_Initial2=(ADDPROC)GetProcAddress(hInst,"DL_Initial");//获取dll的导出函数
if(!DL_Initial2)
{
AfxMessageBox("加载动态连接库“DLCWB.DLL”,获取函数地址失败!");
return FALSE;
}
else
{
AfxMessageBox("加载动态连接库“DLCWB.DLL”,获取初始化函数地址成功!^_^!");
if(DL_Initial2(hDevice1,m_hWnd,1)==DL_SUCCESS)//判断初始化函数是否调用成功
{
AfxMessageBox("设备连接成功!^_^!"); hDevice3=hDevice1;//将局部定义的变量赋给全局变量保存,用于给其他函数传递参数变量 CString str; //
str.Format("hDevice1=%d",&hDevice1); //
::MessageBox(NULL,str,"测验框",MB_OK);//测试返回的设备句柄值
delete hDevice1; CString str1;
str1.Format("hDevice3=%d",&hDevice3);
::MessageBox(NULL,str1,"测验框",MB_OK);//测试返回的设备句柄值 return TRUE;
}
else//如果初始化失败则退出程序
{
AfxMessageBox("设备连接错误!");
return FALSE;
}
} 库函数连接和调用都成功了,程序连接和编译都ok,但运行的话就会提示0x*****内存不能为written!我也知道是我程序有地方指针或者内存分配有问题,但小弟太菜了,找了n长时间都没找出错误在那里,恳求高手用小拇指给我指点下~~
问题的重点:(1程序中的错误 (2 函数DL_Initial()中的第一个设备句柄的参数前加OUT的意义作用功能等等,请从最基本的讲起,小弟迷惑中,第一次见这么用的 (3程序可以改进的地方
最终目的:(1 得到设备句柄参数hDevice. (2 搞清楚错误在那里 (3 搞清楚OUT的用法
顶礼膜拜,不胜感激!~
函数: DL_Initial
功能: 初始化设备,返回设备句柄
参数: hDevice 函数调用成功则返回设备句柄,用于调用其他API函数
hWnd 主窗口的句柄,用来接收WM_CAPTURE,WM_EXITBTNDOWN等消息
nCom 使用的COM端口号,默认为COM1
说明: 此函数的每一次调用,都要有DL_UnInitial相对应,当返回DL_SUCCESS时表示函数
调用成功,hDevice是返回给用户设备句柄。这个句柄将作为其他API函数的参数。
--------------------------------------------------------------*/
DLCWB_API int __stdcall DL_Initial( OUT HANDLE *hDevice, HWND hWnd, int nCom = 1 );下边是我在C**Dlg.cpp的OnInint()函数中对上边库函数的动态调用,其中有好多语句可以砍掉,是我为了
测试而加的:
HANDLE *hDevice1=new HANDLE ;
if(hDevice1==0)
{
MessageBox("内存分配失败");
}
hInst=LoadLibrary("DLCWB.Dll");//动态加载dll
typedef int (*ADDPROC)(OUT HANDLE *hDevice,HWND hWnd,int nCom=1);//定义函数指针类型
ADDPROC DL_Initial2=(ADDPROC)GetProcAddress(hInst,"DL_Initial");//获取dll的导出函数
if(!DL_Initial2)
{
AfxMessageBox("加载动态连接库“DLCWB.DLL”,获取函数地址失败!");
return FALSE;
}
else
{
AfxMessageBox("加载动态连接库“DLCWB.DLL”,获取初始化函数地址成功!^_^!");
if(DL_Initial2(hDevice1,m_hWnd,1)==DL_SUCCESS)//判断初始化函数是否调用成功
{
AfxMessageBox("设备连接成功!^_^!"); hDevice3=hDevice1;//将局部定义的变量赋给全局变量保存,用于给其他函数传递参数变量 CString str; //
str.Format("hDevice1=%d",&hDevice1); //
::MessageBox(NULL,str,"测验框",MB_OK);//测试返回的设备句柄值
delete hDevice1; CString str1;
str1.Format("hDevice3=%d",&hDevice3);
::MessageBox(NULL,str1,"测验框",MB_OK);//测试返回的设备句柄值 return TRUE;
}
else//如果初始化失败则退出程序
{
AfxMessageBox("设备连接错误!");
return FALSE;
}
} 库函数连接和调用都成功了,程序连接和编译都ok,但运行的话就会提示0x*****内存不能为written!我也知道是我程序有地方指针或者内存分配有问题,但小弟太菜了,找了n长时间都没找出错误在那里,恳求高手用小拇指给我指点下~~
问题的重点:(1程序中的错误 (2 函数DL_Initial()中的第一个设备句柄的参数前加OUT的意义作用功能等等,请从最基本的讲起,小弟迷惑中,第一次见这么用的 (3程序可以改进的地方
最终目的:(1 得到设备句柄参数hDevice. (2 搞清楚错误在那里 (3 搞清楚OUT的用法
顶礼膜拜,不胜感激!~
改成这样试试吧
HANDLE hDevice1;
if(DL_Initial2(&hDevice1,m_hWnd,1)==DL_SUCCESS