у меня возникла проблема, когда я пытаюсь построить этот пример tapi3 c ++ с использованием компилятора mingGw w64 в eclipse, я следовал примеру с пошаговым MSDN шаг за шагом
#include <iostream>
#include <tapi3.h>
using namespace std;
int main() {
// Initialize COM.
HRESULT hr = CoInitializeEx(
NULL, COINIT_MULTITHREADED);
if (hr != S_OK)
cout << "CoInitializeEx Failed !!!" << endl;
// Create a TAPI entry point object.
ITTAPI *gpTapi; // globally allocated
hr = CoCreateInstance(CLSID_TAPI, NULL, CLSCTX_INPROC_SERVER, IID_ITTAPI,
(LPVOID *) &gpTapi);
if (hr != S_OK)
cout << "CoCreateInstance Failed !!!" << endl;
// Initialize TAPI.
hr = gpTapi->Initialize();
if (hr != S_OK)
cout << "gpTapi->Initialize() Failed !!!" << endl;
// Declare the interfaces used to select an address.
IEnumAddress * pIEnumAddress;
ITAddress * pAddress;
ITMediaSupport * pMediaSupport;
VARIANT_BOOL bSupport;
// Use the TAPI object to enumerate available addresses.
hr = gpTapi->EnumerateAddresses(&pIEnumAddress);
// If (hr != S_OK) process the error here.
// Locate an address that can support the media type the application needs.
while ( S_OK == pIEnumAddress->Next(1, &pAddress, NULL)) {
// Determine the media support.
hr = pAddress->QueryInterface(IID_ITMediaSupport,
(void **) &pMediaSupport);
if (hr != S_OK)
cout << "pAddress->QueryInterface() Failed !!!" << endl;
// In this example, the required media type is already known.
// The application can also use the address object to
// enumerate the media supported, then choose from there.
hr = pMediaSupport->QueryMediaType(TAPIMEDIATYPE_AUDIO | TAPIMEDIATYPE_VIDEO, &bSupport);
if (hr != S_OK)
cout << "pMediaSupport->QueryMediaType() Failed !!!" << endl;
if (bSupport) {
break;
}
}
// pAddress is now a usable address.
return 0;
}
Я добавил lib ole32 и old32, но когда я собираю этот пример, он возвращает это время каждый раз, но когда я компилирую с использованием Visual C ++, это работает
src\main.o:main.cpp (.rdata$.refptr.IID_ITMediaSupport[.refptr.IID_ITMediaSupport]+0x0): undefined reference to `IID_ITMediaSupport'
src\main.o:main.cpp:(.rdata$.refptr.CLSID_TAPI[.refptr.CLSID_TAPI]+0x0): undefined reference to `CLSID_TAPI'
src\main.o:main.cpp:(.rdata$.refptr.IID_ITTAPI[.refptr.IID_ITTAPI]+0x0): undefined reference to `IID_ITTAPI'
collect2.exe: error: ld returned 1 exit status
пожалуйста, вы можете помочь мне решить эту проблему, извините за мой английский
Убедитесь, что добавлены следующие файлы lib:
version.lib ole32.lib oleaut32.lib uuid.lib
(источник: http://microsoft.public.win32.programmer.tapi.narkive.com/e4h0yQcj/com-and-tapi-initialize-error)
CLSID_TAPI и IID_ITMediaSupport являются внешними символами, поэтому необходимы библиотеки.
IID_ITTAPI известен, и его также можно добавить непосредственно в качестве объявления заголовка, например так:
const IID IID_ITTAPI = {0xB1EFC382,0x9355,0x11d0,{0x83,0x5C,0x00,0xAA,0x00,0x3C,0xCA,0xBD}};
Других решений пока нет …