给C#调用的MFC dll的编撰
给C#调用的MFC dll的编写
在mfc测试程序下测试没有什么问题,可是到C#下测试就出现问题了,每次调用到CreateEx函数的时候就出现断言错误。然后认为是资源切换问题添加AFX_MESSAGE_STATE(AfxGetStaticModuleState())函数,可是dll编译通不过,报连接错误,重复定义问题,后面就没招了,求各位帮忙。
第一,是不是资源切换问题?
第二,给C#调用的MFC dll有什么需要特别注意的吗?
第三,分就这么多了,看来又要重新注册账号了。
谢谢
------最佳解决方案--------------------
AFX_MESSAGE_STATE(AfxGetStaticModuleState())函数,
带Afx等字眼的都是MFC专用的。不能被C#调用。
------其他解决方案--------------------
这种情况还是把MFC的做成一个exe,C#另一个exe调用会问题少些
------其他解决方案--------------------
标准的dll调用Mfc的dll。还真没这么用过,不过我感觉应该是调用不成功的。
------其他解决方案--------------------
我觉得MFC的DLL的函数中先调用这个是没错的~除非像前面的老大所说不能用mfc写DLL给C#用
------其他解决方案--------------------
C#下面都只支持extern "C"导出的。
用显示导出的方法看看
------其他解决方案--------------------
MFC DLL一般只给MFC程序调用,给C#调用,要么是标准DLL,要么通过COM方式的DLL
------其他解决方案--------------------
这个都没问题,DLL里面有CreateEx函数来创建窗口,每次代码执行到CreateEx这个函数的时候就出现断言(自己在DLL代码里面添加MessageBox来测试到的),所以想是不是资源切换的问题。
还有就是这个dll是修改的别的人的,所以不明白为什么添加AFX_MESSAGE_STATE(AfxGetStaticModuleState())会有重定义的错误
------其他解决方案--------------------
当真?
那是不是说需要改成标准DLL?
原来出错的是AfxRegisterWndClass(CS_CLASSDC);这个函数,因为是作为CreateEx的参数来使用的,还以为是CreateEx函数出错的,其实是AfxRegisterWndClass就出错了
------其他解决方案--------------------
那再问一个问题,如果我创建一个标准dll,用这个标准dll调用mfc dll,然后C#调用这个标准dll,这样行不行?
------其他解决方案--------------------
我这个函数还没有被C#调用了,只是在MFC dll中添加上这个函数,可是dll编译通不过,出现dllmain重定义的错误,被调用出错的是窗口注册函数AfxRegisterWndClass(CS_CLASSDC),当然了也是Afx的函数了
------其他解决方案--------------------
谢谢各位了,好像是afxwin.h中已经定义了DllMain函数与自己定义的DllMain函数相冲突了,不过我有点不明白的是,之前一直不冲突,为什么使用的资源切换AFX_MESSAGE_STATE(AfxGetStaticModuleState())就冲突了,不明白其中的原理,求解释
在mfc测试程序下测试没有什么问题,可是到C#下测试就出现问题了,每次调用到CreateEx函数的时候就出现断言错误。然后认为是资源切换问题添加AFX_MESSAGE_STATE(AfxGetStaticModuleState())函数,可是dll编译通不过,报连接错误,重复定义问题,后面就没招了,求各位帮忙。
第一,是不是资源切换问题?
第二,给C#调用的MFC dll有什么需要特别注意的吗?
第三,分就这么多了,看来又要重新注册账号了。
谢谢
------最佳解决方案--------------------
AFX_MESSAGE_STATE(AfxGetStaticModuleState())函数,
带Afx等字眼的都是MFC专用的。不能被C#调用。
------其他解决方案--------------------
这种情况还是把MFC的做成一个exe,C#另一个exe调用会问题少些
------其他解决方案--------------------
标准的dll调用Mfc的dll。还真没这么用过,不过我感觉应该是调用不成功的。
------其他解决方案--------------------
我觉得MFC的DLL的函数中先调用这个是没错的~除非像前面的老大所说不能用mfc写DLL给C#用
------其他解决方案--------------------
C#下面都只支持extern "C"导出的。
用显示导出的方法看看
------其他解决方案--------------------
MFC DLL一般只给MFC程序调用,给C#调用,要么是标准DLL,要么通过COM方式的DLL
------其他解决方案--------------------
这个都没问题,DLL里面有CreateEx函数来创建窗口,每次代码执行到CreateEx这个函数的时候就出现断言(自己在DLL代码里面添加MessageBox来测试到的),所以想是不是资源切换的问题。
还有就是这个dll是修改的别的人的,所以不明白为什么添加AFX_MESSAGE_STATE(AfxGetStaticModuleState())会有重定义的错误
------其他解决方案--------------------
当真?
那是不是说需要改成标准DLL?
原来出错的是AfxRegisterWndClass(CS_CLASSDC);这个函数,因为是作为CreateEx的参数来使用的,还以为是CreateEx函数出错的,其实是AfxRegisterWndClass就出错了
------其他解决方案--------------------
那再问一个问题,如果我创建一个标准dll,用这个标准dll调用mfc dll,然后C#调用这个标准dll,这样行不行?
------其他解决方案--------------------
我这个函数还没有被C#调用了,只是在MFC dll中添加上这个函数,可是dll编译通不过,出现dllmain重定义的错误,被调用出错的是窗口注册函数AfxRegisterWndClass(CS_CLASSDC),当然了也是Afx的函数了
------其他解决方案--------------------
谢谢各位了,好像是afxwin.h中已经定义了DllMain函数与自己定义的DllMain函数相冲突了,不过我有点不明白的是,之前一直不冲突,为什么使用的资源切换AFX_MESSAGE_STATE(AfxGetStaticModuleState())就冲突了,不明白其中的原理,求解释