Ich komme immer noch nicht voran. Lassen Sie mich einige der gestellten Fragen beantworten:
1) Windows kann keine Abhängigkeit laden, ich denke, da Dependency Walker zeigt, dass alles in Ordnung ist. 2) Ich habe einen Debugger angehängt, der im Wesentlichen Folgendes ausgibt, wenn er versucht, MatrixWorkset.dll zu laden:
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:Gestoppt.
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: Ich bin mir nicht sicher, was Sie mit einem "global mit Klassentyp" meinen. Die Datei, die Probleme verursacht, wurde in einer anderen DLL inkludiert, in der sie einwandfrei funktionierte und erfolgreich geladen wurde.
Das ist der Anfang der Datei MatrixVariable.h:
#include "QtSF/Variable.h" // Befindet sich in der abhängigen DLL (der DLL, in der diese Datei immer vorhanden war.
#include "Matrix.h" // Datei befindet sich in dieser DLL
#include "QList" // Dies sind alles Dateien aus dem Qt Framework
#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:
//! Standardkonstruktor.
MatrixVariable(const QString& name, int rows, int cols, double fill\_real = 0, double fill\_complex = 0, bool isReal = true);
etc. etc. etc.
Eine mögliche Lösung wäre, die MatrixVariable-Datei wieder in die ursprüngliche DLL zu verschieben, aber das widerspricht der Idee, die DLL in kleinere Teile aufzuteilen, was nicht wirklich eine Option ist.
0 Stimmen
Zeigen Sie etwas Code, ein #include kann alles tun.
0 Stimmen
OK, nach weiterem Debuggen. Die Datei (mit der Klasse MatrixVariable) muss nicht einmal in anderen Dateien enthalten sein. Ich muss sie einfach zum Makefile für die DLL hinzufügen, was die DLL zerstört. MatrixVariable erbt von einer Klasse innerhalb der zweiten DLL und das war es auch schon. Es hat funktioniert, als nur 1 DLL verwendet wurde.