PUSH 004EED38                               ;  ASCII "AA10"
LEA ECX,DWORD PTR SS:[EBP-14]
CALL <JMP.&MFC42D.#487>
MOV DWORD PTR SS:[EBP-4],0
LEA EAX,DWORD PTR SS:[EBP-14]
PUSH EAX                                    ;  地址为EAX的内容为"AA10"
CALL <JMP.&dllexpfun.?Check@@YAHPAVCString@@@Z>
ADD ESP,4
TEST EAX,EAX
JNZ SHORT 00418257问题1:dll输出函数怎么可以有?和@
问题2:我写的下面的函数编译完后,将dll文件用ultraedit将函数名改成?Check@@YAHPAVCString@@@Z后,显示的为何是乱码。
extern "C" _declspec ( dllexport ) BOOL _Check__YAHPAVCString___Z(char* s)
{
 AfxMessageBox(s);
 return 1;
}请大虾们指点,万分感激

解决方案 »

  1.   

    将下".DEF"加入工程EXPORTS
             _Check__YAHPAVCString___Z
      

  2.   

    ?号是因为名字分裂造成的,你用.def文件就行了,
      

  3.   

    .def里添加后出现了编译时提示:
    Linking...
    dllexpfun.def : error LNK2001: unresolved external symbol _Check__YAHPAVCString___Z
    Release/dllexpfun.lib : fatal error LNK1120: 1 unresolved externals
    LINK : fatal error LNK1141: failure during build of exports file
    Error executing link.exe.sec.dll - 3 error(s), 0 warning(s)怪了,我的问题内容怎么只显示二行,其他的要选中了滚动后才能看见?
      

  4.   

    上一回复是我不小心改了名称造成的.def里添加后还是乱码.
      

  5.   

    不只是简单的添加一个.def文件,你还需要改变连接开关,具体可以参考msdn
      

  6.   

    定义函数为_declspec(dllexport) BOOL __stdcall Check(CString s)
    时输出函数是?Check@@YGHVCString@@@Z
    还差一点点了?Check@@YAHPAVCString@@@Z
    哪位大侠继续指点