下边是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的用法
                           顶礼膜拜,不胜感激!~