AutoCAD 加载了一个ARX(DLL),此DLL有一个导出函数形如:void Fun();我要在另一个EXE中调用它
现在我已经取到了这个ARX(DLL)的HMOUDLE hMoudle,
怎么调用?发消息的方法我做过了,可以,不过在ARX中要安装线程钩子。讨厌用这种方法。
考虑到兼容性,ARX不能改为服务COM所以我想有种方法能跨进程调用这个DLL中的导出函数就好了  请问怎么办啊?

解决方案 »

  1.   

    将Dll动态加载一下,不就可以了吗?
      

  2.   

    xiaowang,很久不见咯!有空出来喝茶!!
    给你看一篇文章,不知道适用不?
    http://www.luocong.com/articles/show_article.asp?Article_ID=23 
      

  3.   

    windows核心编程第22章,进程注入技术
      

  4.   

    将Dll动态加载后,使用GetProcAddress函数获得函数的首地址。这样就可以就可以调用原来函数的技能了具体:
    显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。使用返回的函数指针调用 DLL 函数。GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或 GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。由于是通过指针调用 DLL 函数并且没有编译时类型检查,需确保函数的参数是正确的,以便不会超出在堆栈上分配的内存和不会导致访问冲突。确保类型安全的一种方法是查看导出函数的函数原型,并创建函数指针的匹配 typedef。例如:typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
    ...HINSTANCE hDLL;               // Handle to DLL
    LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
    DWORD dwParam1;
    UINT  uParam2, uReturnVal;hDLL = LoadLibrary("MyDLL");
    if (hDLL != NULL)
    {
       lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
                                               "DLLFunc1");
       if (!lpfnDllFunc1)
       {
          // handle the error
          FreeLibrary(hDLL);
          return SOME_ERROR_CODE;
       }
       else
       {
          // call the function
          uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
       }
    }
    调用 GetProcAddress 时指定所需函数的方式取决于 DLL 的生成方式。仅当要链接到的 DLL 是用模块定义 (.DEF) 文件生成的,并且序号在 DLL 的 .DEF 文件的 EXPORTS 节中与函数一起列出时,才能获取导出序号。如果 DLL 具有许多导出函数,则相对于使用函数名,使用导出序号调用 GetProcAddress 的速度稍快一些,因为导出序号是 DLL 导出表的索引。使用导出序号,GetProcAddress 可直接定位函数,而不是将指定名称与 DLL 导出表中的函数名进行比较。但是,仅当有权控制 .DEF 文件中导出函数的序号分配时,才应使用导出序号调用 GetProcAddress。
      

  5.   

    问得不明不白哦,如果你是想操作另外一个进程的DLL来影响这个进程的一些功能或者获取一些数据,
    那么必须 HOOK 或者 注入,来打破进程边界,才能进行访问。   可以在访问时打破边界,不访问的时候终止。更好的办法我还没想到如果只是访问 DLL 的一个函数,我觉得不会是问这个问题了!
      

  6.   

    如果只是访问 DLL 的一个函数,我觉得不会是问这个问题了!应为你的三角比我多哈
      

  7.   

    GetProcAddress 没用
    我试过了  那个DLL不是我进程里面的  我Get不到注入可以 不过98可以注入吗?mybios(俊俊哥哥)
    --------------
    好久不见啊  好想你哦~~~
      

  8.   

    koko1998(追印) 
    ----
    那个DLL是被CAD Load的 
    我Load不进来的 里面都是一些CAD的函数 调用也没用
    必须在CAD的进程里面调用啊