关于天堂II运行的系统问题天堂I
环境:NTSERVERsubauth。dll动态连接库,服务器启动时被操作系统自动调用,框架是微软给做好的。我要在里面加自己的东西。在VC下编译myDll。dll被subauth。dll调用myApp。 exeVC可执行程序,并已经SetWindowsText了myApp目的:在subauth。dll中调用FindWindow函数找到我的应用程序myApp我实现的过程:1、启动myApp。exe并在subauth。 dll的一个函数中做了如下的调用HWNDm_hwndDest;if((m_hWndDest=FindWindow(NULL,"myApp"))!=NULL){//说明我已经...全部
环境:NTSERVERsubauth。dll动态连接库,服务器启动时被操作系统自动调用,框架是微软给做好的。我要在里面加自己的东西。在VC下编译myDll。dll被subauth。dll调用myApp。
exeVC可执行程序,并已经SetWindowsText了myApp目的:在subauth。dll中调用FindWindow函数找到我的应用程序myApp我实现的过程:1、启动myApp。exe并在subauth。
dll的一个函数中做了如下的调用HWNDm_hwndDest;if((m_hWndDest=FindWindow(NULL,"myApp"))!=NULL){//说明我已经找到了}可返回值总是空的。
可是我把它移植到myDll。dll中立刻就能找到。这是疑问1。于是我采取了第二个方案2、让subauth。dll中的FindWindow做枚举,然后我自己做比较。函数如下:charappCaption[200];memset(appCaption,0,200);if((m_hWndDest=FindWindow(NULL,NULL))!=NULL){while(m_hWndDest!=NULL){memset(appCaption,0,200);ret=GetWindowText(m_hWndDest,appCaption,200);if(strcmp(strupr(appCaption),"myApp")==0){//说明我找到了break;}m_hWndDest=GetNextWindow(m_hWndDest,GW_HWNDPREV);}}可是只有m_hWndDest=FindWindow(NULL,NULL)步中的返回值是0x00010026。
我用spy++查看就是没有这个值。然后的m_hWndDest=GetNextWindow(m_hWndDest,GW_HWNDPREV)的返回值就为空了,换了参数GW_HWNDNEXT情形依旧。
可通过SPY++查看windows有十几个的。将此代码完全不变的移植到myDll。dll中,能够遍历spy++看到的所有window。我用softice的hwnd命令也查不到spy++看到的window,提示是unabletofindadesktopwindow。
疑问2:为什么同样的代码在2个动态库中的执行结果完全不同,原因在哪。由于这种方案依然行不通,因此我决定采取第3种方案。这时我已熬的两眼通红了3、既然在subauth。dll中的想法能够在myDll。
dll中实现,那我为什么不让subauth。dll调用myDll。dll中的函数来达到我的目的呢,于是我开始copy。。paste。。copy。。paste。。。。。。我在myDll。dll中定义了函数myTest1,我的mydll。
h中关于myTest1的声明是:extern"C"__declspec(dllexport)intmyTest1();然后在subauth。dll中#include"mydll。h",并加入了mydll。
lib终于可以compile了。可编译的结果是c:\mydll\mydll。h(2):errorC2059:syntaxerror:'string'我把声明改为__declspec(dllexport)intmyTest1();编译通过。
我太高兴了,因为我离胜利只有一步了。于是我在subauth。dll的一个函数中加入了intret=myTest();编译。。。连接。。。?有错误subauth。 :unresolvedexternalsymbol_myTest1subauth。
:1unresolvedexter :'link':returncode'0x460'Stop。ErrorexecutingNMAKE。我该怎么办呢?于是我新建了一个DLL,myDllTest。
dll,让它来调用myTest1(),同样按照上面的操作步骤,copy。。paste。。compile。。link。。exe。。trace。。success。成功了。疑问3:代码没有做任何更改,步骤完全相同,可结果完全不同。
为什么subauth。dll中总提示errorLNK2001的错误,无论我如何做更改。怎么改正这种错误呢?我改过函数声名、subauth的(。def、IMPORTS和NMAKE),问题依旧。收起