Hi,
I installed the directx package and tried to compile the first direct play
tutorial from the MS-DirectX8 sdk (sdk not installed, because DX-devpack is
installed).
At the linker section I includet "libdplayx.a" and "libdxguid.a".
In the sourcecode I includet "dplay8.h" (for testing I includet "dplay.h",
too).
But if I try to compile the code I get these error messages:
[Linker error] undefined reference to `CoInitializeEx@8'
[Linker error] undefined reference to `CoCreateInstance@20'
[Linker error] undefined reference to `CoUninitialize@0'
[Linker error] undefined reference to `CoCreateInstance@20'
[Build Error] [out/DPlay.exe] Error 1
Has someone experiences with directPlay and can help me with this ???
The complete source:
#define INITGUID
#define _WIN32_DCOM
#include <iostream>
#include <stdlib.h>
#include <dplay.h> // not nessesary
#include <dplay8.h>
using namespace std;
IDirectPlay8Peer* g_pDP = NULL; // DirectPlay peer object
// Funktionen
HRESULT WINAPI DirectPlayMessageHandler(PVOID pvUserContext, DWORD
dwMessageId, PVOID pMsgBuffer);
HRESULT InitDirectPlay();
void CleanupDirectPlay();
// Hilfs-Makros
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } }
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
// {76327E56-BBD7-4e3d-938B-EF1DC94080B5}
DEFINE_GUID(DPlayTest, 0x76327e56, 0xbbd7, 0x4e3d, 0x93, 0x8b, 0xef, 0x1d,
0xc9, 0x40, 0x80, 0xb5);
int main(int argc, char *argv[]){
HRESULT hr;
DPN_SERVICE_PROVIDER_INFO* pdnSPInfo = NULL;
DPN_SERVICE_PROVIDER_INFO* pdnSPInfoEnum = NULL;
DWORD dwItems = 0;
DWORD dwSize = 0;
DWORD i;
// COM initialisieren um CoCreateInstance benutzen zu können
CoInitializeEx(NULL, COINIT_MULTITHREADED);
// DirectPlay initialisieren
if(FAILED(hr = InitDirectPlay())){
printf("DirectPlay Initialisierung fehlgeschlagen: 0x%X\n", hr);
goto LCleanup;
}
// alle Service Provider Enumerieren
hr = g_pDP->EnumServiceProviders(NULL, NULL, NULL, &dwSize, &dwItems, 0);
if(hr != DPNERR_BUFFERTOOSMALL){
printf("Enumerierung der Service Provider fehlgeschlagen: 0x%X\n", hr);
goto LCleanup;
}
pdnSPInfo = (DPN_SERVICE_PROVIDER_INFO*) new BYTE[dwSize];
if(FAILED(hr = g_pDP->EnumServiceProviders(NULL, NULL, pdnSPInfo, &dwSize,
&dwItems, 0))){
printf("Enumerierung der Service Provider fehlgeschlagen: 0x%X\n", hr);
goto LCleanup;
}
// Alle Provider durchlaufen und ausdrucken
pdnSPInfoEnum = pdnSPInfo;
for(i = 0; i < dwItems; i++){
printf("Service Provider gefunden: %S\n", pdnSPInfoEnum->pwszName);
pdnSPInfoEnum++;
}
LCleanup:
SAFE_DELETE_ARRAY(pdnSPInfo);
CleanupDirectPlay();
CoUninitialize();
system("PAUSE");
return 0;
}
HRESULT WINAPI DirectPlayMessageHandler( PVOID pvUserContext, DWORD
dwMessageId, PVOID pMsgBuffer){
return S_OK;
}
HRESULT InitDirectPlay(){
HRESULT hr = S_OK;
// IDirectPlay8Peer Objekt erstellen
if(FAILED(hr = CoCreateInstance(CLSID_DirectPlay8Peer, NULL,
CLSCTX_INPROC_SERVER, IID_IDirectPlay8Peer, (LPVOID*) &g_pDP))){
printf("Erstellen des IDirectPlay8Peer Objekts fehlgeschlagen: 0x%X\n",
hr);
goto LCleanup;
}
// DirectPlay initialisieren
if(FAILED(hr = g_pDP->Initialize(NULL, DirectPlayMessageHandler, 0 ))){
printf("Initialisierung von DirectPlay fehlgeschlagen: 0x%X\n", hr);
goto LCleanup;
}
LCleanup:
return hr;
}
void CleanupDirectPlay(){
// DirectPlay löschen
if(g_pDP)
g_pDP->Close(0);
SAFE_RELEASE(g_pDP);
}
|