我以前写的测试程序,可以用的,也许有用
long pascal CPlApplet(HWND hWnd,UINT wMsg,long lp1,long lp2)
{
char szMsg[8][256] = {"CPL_INIT","CPL_GETCOUNT","CPL_INQUIRE","CPL_DBLCLK",
"CPL_EXIT","CPL_STOP","CPL_NEWINQUIRE","other"};
int nIndex = 0;
CPLINFO *pCplInfo;
BOOL bRet =1; switch(wMsg)
{
case CPL_INIT:
nIndex = 0;
break;
case CPL_GETCOUNT:
nIndex = 1;
break;
case CPL_INQUIRE:
// case CPL_NEWINQUIRE:
nIndex = 2;
if(lp1>0) return 0;
pCplInfo = (CPLINFO*)lp2;
pCplInfo->idInfo = IDI_MAIN;
pCplInfo->idName = IDI_MAIN;
pCplInfo->idIcon = IDI_MAIN;
pCplInfo->lData = NULL;
bRet = 0;
break;
case CPL_DBLCLK:
nIndex = 3;
On_Process(hWnd,(CPLINFO*)lp2);
return 1;
break;
case CPL_EXIT:
nIndex = 4;
break;
case CPL_STOP:
nIndex = 5;
break;
case CPL_NEWINQUIRE:
nIndex = 6;
break;
default:
nIndex = 7;
bRet = 0;
break;
} MessageBox(hWnd,szMsg[nIndex],"消息!",MB_OK);
return bRet;
}我看你的程序也没问题。:(

解决方案 »

  1.   

    测试你的代码,可以的!
    注意你的CPL要拷贝到系统目录下才能在控制面板上看到的。
    还有在
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
        ghInstance = (HINSTANCE)hModule;//我没有作判断,
    return TRUE;
    }
      

  2.   

    谢谢老大哥的参与!
    你说的地方我都有呀!,现在主要问题是在CPlApplet收到第一个消息CPL_INIT后
    就再也接收不到消息了,产一个异常中断.
      

  3.   

    我通过代理上网呀!,OICQ不能用呀!,5555~~~~5555~~~,为我哀掉3分钟吧!
      

  4.   

    好了,你的声明改成
    extern "C" __declspec(dllexport) long pascal CPlApplet(HWND hWnd,UINT wMsg,long lp1,long lp2);
    就是这样了,
    我刚才试过的。
    主要是pascal的调用方式。
    OK
      

  5.   

    不行呀!,输出函数变成了_CPlApplet@16(),控件无法安装呀!
      

  6.   

    找到了,气得吐血呀!,我开始也是怀疑pascal的调用问题,老哥说的没错,不过老哥的声明我点问题,我的解决如下:long CALLBACK CPlApplet(HWND hWnd,UINT wMsg,long lp1,long lp2);,然后建立hrtmouse.def中加入export CPLApplet()就OK了,谢谢大哥!,给分.