Je ne comprends toujours pas. Permettez-moi de répondre à certaines des questions posées:
1) Windows ne manque pas de charger une dépendance, je pense que Dependency Walker montre que tout va bien. 2) J'ai joint un débogueur qui imprime essentiellement les points suivants quand il tente de charger 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: Je ne sais pas ce que vous entendez un « type global avec classe » . Le fichier qui pose les problèmes a été inclus dans une DLL différente dans laquelle il a bien fonctionné et la DLL chargée avec succès.
C'est en haut du fichier MatrixVariable.h:
#include "QtSF/Variable.h" // Located in depending DLL (the DLL in which this file always lived.
#include "Matrix.h" // File located in this DLL
#include "QList" // These are all files from the 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:
//! Default constructor.
MatrixVariable(const QString& name, int rows, int cols, double fill_real = 0, double fill_complex = 0, bool isReal = true);
etc., etc., etc.
Une solution possible consiste à remettre le fichier MatrixVariable dans la DLL d'origine, mais cela va à l'encontre de l'idée de scinder la DLL en parties plus petites, ce qui n'est pas vraiment une option.
un accès à la mémoire partagée? – CookieOfFortune
Montre du code, un #include peut faire n'importe quoi. – Ismael
OK, après plus de débogage. Le fichier (avec la classe MatrixVariable) n'a même pas besoin d'être inclus dans d'autres fichiers. J'ai juste besoin de l'ajouter au fichier make pour la DLL qui casse la DLL. MatrixVariable hérite d'une classe à l'intérieur de la seconde DLL et c'est à peu près tout. Cela a fonctionné en employant seulement 1 DLL –