我还是没搞定。让我回答一些问题:
1)Windows没有加载依赖项失败,因为Dependency Walker显示一切正常。
2)当它尝试加载MatrixWorkset.dll时,我附加了一个调试器,基本上会打印以下内容:
10:04:19.234
stdout:&"warning: Loading components from D:/ScinericSoftware/VisualWorkspace/trunk/Targets/bin/MatrixWorkset.dll\n"
10:04:19.234
stdout:&"\n"
status:Stopped: "signal-received"
status:Stopped.
10:04:19.890
stdout:30*stopped,reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation fault",thread-id="1",frame={addr="0x7c919994",func="towlower",args=[],from="C:\\WINDOWS\\system32\\ntdll.dll"}
input:31info shared
input:32-stack-list-arguments 2 0 0
input:33-stack-list-locals 2
input:34-stack-list-frames
input:35-thread-list-ids
input:36-data-list-register-values x
10:04:19.890
3) MSalters:我不确定你所说的“全局类类型”是什么意思。出现问题的文件已被包含在不同的DLL中,在其中它工作正常且DLL已成功加载。
这是MatrixVariable.h文件的顶部内容:
#include "QtSF/Variable.h" //位于依赖的DLL中(此文件始终存在的DLL)。
#include "Matrix.h" //文件位于此DLL中
#include "QList" //这些都是来自Qt框架的文件
#include "QModelIndex"
#include "QItemSelection"
#include "QObject"
using namespace Zenautics;
using namespace std;
class MatrixVariable : public Variable
{
Q_OBJECT
Q_PROPERTY(int RowCount READ rowCount WRITE setRowCount)
Q_PROPERTY(int ColumnCount READ columnCount WRITE setColumnCount)
Q_PROPERTY(int UndoPoints READ undoPoints WRITE setUndoPoints)
public:
//! 默认构造函数。
MatrixVariable(const QString& name, int rows, int cols, double fill_real = 0, double fill_complex = 0, bool isReal = true);
等等等等。
一个可能的解决方案是将MatrixVariable文件放回原来的DLL中,但这违背了将DLL拆分成更小部分的整体思路,这并不是一个真正的选择。