Toon posts:

Third Party DLL Gebruik in VC++

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Tweakers,

Graag wil ik een third party DLL gebruiken in mijn VC++ applicatie, het gaat om de dMCScript.dll van dbPowerAmp. Op de website staat beschreven hoe deze te gebruiken met Borland C++ maar dat heb ik niet en ken ik niet.
http://www.dbpoweramp.com/developer-scripting-dmc.htm

Ik heb OLE Viewer gebruikt en van de DLL een IDL file gemaakt. Vanuit Visual C++ heb ik (na wat veranderingen aan de IDL) een .c en een .h file kunnen maken. Maar deze kan ik niet compileren.

Weet iemand hoe ik gemakkelijk tot resultaat kan komen, of wat ik moet lezen om te begrijpen hoe de classes van de DLL te gebruiken.

Alvast bedankt, mvg

Roel :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:20

.oisyn

Moderator Devschuur®

Demotivational Speaker

Maar deze kan ik niet compileren
Het zou handig zijn als je erbij vermeldt waarom dan niet, wat de foutmeldingen zijn, e.d.. Met alleen "het werkt niet" kunnen we je namelijk niet helpen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 11:58

Super_ik

haklust!

heb je bij msvc ook geen functie import library?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
Allereerst moet is al de IDL file aanpassen om hem te compileren, dat vind ik al vreemd. Maar goed, ik weet niet of het kwaat kan.

[
uuid(E0F7789A-88C0-450B-AD6C-A7EB6D227127),
version(1.0),
helpstring("dMCScripting 1.0 Type Library"),
custom(DE77BA64-517C-11D1-A2DA-0000F8773CE9, 100663643),
custom(DE77BA63-517C-11D1-A2DA-0000F8773CE9, 1100969234),
--> custom(DE77BA65-517C-11D1-A2DA-0000F8773CE9, Created by MIDL version 6.00.0347 at Sat Nov 20 16:46:40 2004)
]
Als ik deze regel weg quote dan gaat het compileren wel goed, hierna heb ik een .c en een .h file.

Volgende stap:
Compiling...
dMCScripting_i.cpp
dMCScripting_i.cpp(101) : fatal error C1010: unexpected end of file while looking for precompile header directive
Build log was saved at "file://Debug\BuildLog.htm"
AutoAudioConv - 1 error(s), 0 warning(s)

Vind het maar vage files die .c en .h file. Maargoed dit zijn dus de problemen die ik tegen kom.

Alvast bedankt voor de hulp!

Roel
Vakwerk in hakwerk toch?

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 11:58

Super_ik

haklust!

heb je stdafx.h wel ge#include?

anders moet je mischien je precompiled header option op automatically generate(/xy) zetten
project properties -> c/c++ -> precompiled headers

offtopic:
anders probeer m eens in vxWorks te compilen, mischien dat dat makkelijker en doorzichtiger is :P

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 12:40

Dricus

ils sont fous, ces tweakers

In Visual C++ kun je het volgende statement gebruiken om een COM/ActiveX DLL te importeren:
C++:
1
2
// Vervang activex.dll met je eigen dll filenaam (en eventueel het pad)
#import "activex.dll"

Als je vervolgens compileert worden er 2 files gegenereerd: activex.tli en activex.tlh.

Deze 2 files (hoef je trouwens niet expliciet te includen) bevatten C++ classes voor het gebruik van de in activex.dll beschikbaar gestelde COM objecten.

Als je het #import statement in stdafx.h plaatst, dan zijn de classes meteen vanuit alle .cpp files in je project te benaderen (mits je in al deze files stdafx.h ge-include natuurlijk).

Zie de MSDN Library voor meer info over #import.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Verwijderd

Topicstarter
MOOI!

Volgens mij ben ik al een stukje verder heb het volgende gedaan:
#import "Debug\dMCScripting.dll"
using namespace DMCSCRIPTINGLib;

Bij het compileren krijg ik de volgende foutmelding:

Compiling...
AutoAudioConvDlg.cpp
d:\15Minutes\AutoAudioConv\AutoAudioConvDlg.cpp(51) : error C2259: 'DMCSCRIPTINGLib::IConverter' : cannot instantiate abstract class
due to following members:
'HRESULT IUnknown::QueryInterface(const IID &,void ** )' : pure virtual function was not defined
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\Unknwn.h(113) : see declaration of 'IUnknown::QueryInterface'
'ULONG IUnknown::AddRef(void)' : pure virtual function was not defined

En dit dan voor ongeveer 20 virtual functions.

Weet iemand wat ik hieraan kan doen?? >:)

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 11-03 09:21
Ik doe het meestal op deze manier, zo wordt implementatie en definitie gescheiden.
code:
1
2
3
4
5
//het volgende komt in "activex.h"
#import "activex.dll" no_namespace  no_implementation

//dit komt in "activex.cpp"
#import "activex.dll" no_namespace  implementation_only

Verwijderd

Topicstarter
epic007 schreef op dinsdag 27 september 2005 @ 11:59:
code:
1
2
3
4
//het volgende komt in "activex.h"
#import "activex.dll" no_namespace  no_implementation
//dit komt in "activex.cpp"
#import "activex.dll" no_namespace  implementation_only
Dit heb ik nu gedaan! En heb geprobeerd een classe te gebruiken, maar zodra ik da doe:

Compiling...
AutoAudioConvDlg.cpp
d:\15Minutes\AutoAudioConv\AutoAudioConvDlg.cpp(51) : error C2259: 'IConverter' : cannot instantiate abstract class
due to following members:
'HRESULT IUnknown::QueryInterface(const IID &,void ** )' : pure virtual function was not defined
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\Unknwn.h(113) : see declaration of 'IUnknown::QueryInterface'
'ULONG IUnknown::AddRef(void)' : pure virtual function was not defined
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\Unknwn.h(117) : see declaration of 'IUnknown::AddRef'
'ULONG IUnknown::Release(void)' : pure virtual function was not defined

Wat kan ik hier aan doen?

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 12:40

Dricus

ils sont fous, ces tweakers

Ik neem aan dat je new gebruikt om een nieuwe instance van een object te maken.
Als het gaat om COM objecten, moet je echter gebruik maken van CoCreateInstance.

Ik heb nu ff geen tijd om een goed voorbeeld hiervan te geven, maar misschien kom je er met behulp van de MSDN Library ook al uit.

Succes!

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...

Pagina: 1