【发布时间】:2013-07-30 13:09:26
【问题描述】:
大家好。 我必须使用旧实用程序:它将 xls 转换为 txt。 实用程序的逻辑存在一个小问题,但问题出在其他方面...... 该实用程序由exe模块和dll模块两部分组成,并使用MFC。
在 exe 项目中我们有
pInit = (t_bXR_Init)GetProcAddress(hExcel, _T("bXR_Init"));
和
pInit("logfiles",false);
在 dll 项目中我们有
typedef bool (*t_bXR_Init) (CString const &strlogfilespath, bool btxtfile);
XLSREADER_API bool bXR_Init(CString const &strlogfilespath, bool btxtfile);
问题是当我们将参数"logfiles" 发送到函数时它没有得到它。这很奇怪,因为所有其他参数都正确发送。
原因与 CString 的使用有关。但我不知道怎么...
XLSREADER_API 定义为:
#define XLSREADER_API extern "C" __declspec(dllimport)
我也加了
AFX_MANAGE_STATE(AfxGetStaticModuleState());
在函数体的开头(对于 bXR_Init)。但这没有帮助。
我还尝试更改这两个项目的一些设置,所有设置都相同(例如调用转换是 __cldecl(/Gd);我构建了调试版本的 exe 和 dll 或同时构建了 exe 和 dll 的发布版本)。
我也尝试使用CString 而不是CString& - 同样的情况。使用char*可以正常工作,但是老板说先找出问题的根源。
什么可能导致问题(函数没有获取CString参数)?
【问题讨论】:
-
如果我正确理解了这个问题,程序就会编译。 dll 是用 C++ 编写的,是否使用 MFC? bXR_Init 函数在 strlogfilespath 参数中得到什么,是空字符串还是垃圾?
-
是的,使用 MFC。垃圾。
-
尝试用反汇编窗口调试它(不过你必须了解一些x86汇编语言)。这已经帮助我解决了类似的问题(虽然不是在 Windows 上)。