Domanda

Mi imbatto regolarmente in situazioni simili:Ho un sacco di COM .DLL (nessun file IDL) che devo utilizzare e invocare per poter accedere ad alcuni formati di dati estranei (non aperti, non documentati).

La piattaforma Visual Studio di Microsoft ha funzionalità molto interessanti per importare tali DLL COM e utilizzarle nel mio progetto (direttiva #import di Visual C++ o selezionarle e aggiungerle utilizzando le finestre di dialogo di Visual Basic .NET) - e questo è il modo consigliato dai fornitori per utilizzarle.

Sarei interessato a trovare un modo per utilizzare tali DLL su piattaforme di sviluppo non Microsoft.Vale a dire, utilizzando queste classi COM nel progetto C++ compilato con MinGW o Cygwin, o anche il port GCC di Wine su Linux (compila C++ destinato a Win32 in un binario eseguito in modo nativo su Linux).

Ho ottenuto un successo limitato utilizzando Questo driver, ma ciò non ha esito positivo nel 100% delle situazioni (non posso utilizzare gli oggetti COM restituiti da alcuni metodi).

Qualcuno ha avuto successo in situazioni simili?

È stato utile?

Soluzione

Mi rispondo ma sono riuscito a trovare il perfetto libreria per chiamate OLE/COM in compilatori non Microsoft: disaiuto.

(è disponibile da sourceforge.net sotto una licenza BSD permissiva).

Funziona sia in C che in C++ (e quindi anche in qualsiasi altro linguaggio con collegamenti C).Utilizza un tipo printf/scanf sintassi della stringa di formato.
(Passi quello che vuoi purché lo specifichi nella stringa di formato, a differenza di XYDispDriver che richiede che gli argomenti corrispondano esattamente a quanto specificato nella libreria dei tipi).

L'ho modificato un po' per farlo compilare anche sotto Linux con WineGCC (per produrre un elf nativo di Linux dal codice Win32) e per gestire automaticamente le chiamate "by ref" (disthelper stock richiede al programmatore di impostare la propria VARIANT) .

La mia versione con patch e le patch sono disponibili come fork su github:

Ed ecco le mie patch:

Altri suggerimenti

Il problema con il visualizzatore oggetti Ole/Com fornito con Visual Studio e Windows SDK è che produce un .IDL danneggiato dalla .DLL, che non può essere ulteriormente compilato da MIDL in una coppia .H/.CPP.

La reimplementazione di OleViewer da parte di Wine è attualmente instabile e si blocca quando si tenta di utilizzare tali librerie.

Penso che dovresti essere in grado di utilizzare lo strumento gratuito Ole/Com Object Viewer per creare i file di intestazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top