大侠请看:好变态的错误!!(高分求教)
小弟最近用media player sdk编程,环境:winxp bcb6
将sdk的include文件夹下的头文件和需要的dll文件都include进去了。但不知道idl文件是否还用到?
一下是出错的代码:
#include <vcl.h>
#pragma hdrstop
#include "wmp.h"
#include "Unit1.h"
#include "tchar.h"
#include "objbase.h"
#include "windows.h"
。。。。。。。。。。。
。。。。。。。。。。
void __fastcall TForm1::status(){
IWMPCore *LMediaPlayer;
BSTR pbstrStatus;
AnsiString hr,str;
HRESULT res=CoCreateInstance(CLSID_WindowsMediaPlayer,NULL,CLSCTX_ALL,IID_IWMPPlayer,(void**)&LMediaPlayer);
if(res){
hr=LMediaPlayer->get_status(&pbstrStatus);
if(hr=="s_ok"){
str=stringchange(pbstrStatus);
//tchar szValue[1000];
//wsprintf(szValue, _T("Status = %s"), stringchange(value));
MessageBox(NULL, "str.c_str()", "IWMPCore->status", MB_OK); }
//else return 0;
}
}
编译时出错:
[Linker Error] Unresolved external '_IID_IWMPPlayer' referenced from E:\ASF\UNIT1.OBJ
[Linker Error] Unresolved external '_CLSID_WindowsMediaPlayer' referenced from E:\ASF\UNIT1.OBJ
小弟实在不知道原因,还请大侠赐教!
问题点数:100、回复次数:9Top
1 楼jemyzhang(妙狐)回复于 2005-08-18 22:28:47 得分 10
windows的包可能跟bcb不兼容,必须用将容的包才行Top
2 楼greykid()回复于 2005-08-19 08:14:42 得分 0
include文件夹下的idl文件 再编程时需要马?
应该怎样用??Top
3 楼yyhzpk(zpk)回复于 2005-08-19 10:33:10 得分 10
工程lib路径对不对Top
4 楼ablewindy(我是【风子】我怕谁)回复于 2005-08-19 13:00:34 得分 20
可能相关的库没导入吧!Top
5 楼Bill1212(Bill)回复于 2005-08-19 16:23:07 得分 10
你在文件顶部加上
#include <initguid.h>
试试看Top
6 楼greykid()回复于 2005-08-20 11:16:08 得分 0
我加了#include <initguid.h>
可还是不行,就是那两个错。
各位大侠帮忙啊!Top
7 楼videojet(虫虫)回复于 2005-08-21 13:09:56 得分 20
自己将这两个GUID定义一下也可以解决的Top
8 楼greykid()回复于 2005-08-21 16:25:11 得分 0
IWMPCore *LMediaPlayer;
BSTR pbstrStatus;
AnsiString str;
CoInitialize(0);
HRESULT res=CoCreateInstance(CLSID_WindowsMediaPlayer,NULL,CLSCTX_ALL,IID_IWMPPlayer,(void**)&LMediaPlayer);
if(res==S_OK){
HRESULT hr=LMediaPlayer->get_status(&pbstrStatus);
if(hr==S_OK){
str=AnsiString(WideString(pbstrStatus));
MessageBox(NULL,str.c_str(),"IWMPCore->status", MB_OK);
}}
CoUninitialize();
LMediaPlayer->Release();
}
我这样写能调用函数get_status马??Top
9 楼Afile(猎头炳)回复于 2005-08-29 04:17:55 得分 30
[Linker Error] Unresolved external '_IID_IWMPPlayer' referenced from E:\ASF\UNIT1.OBJ
找到IID_IWMPPlayer的定义,把它重制到你的头文件里,改个名字,然后定义成比如:
static GUID MYIID_IWMPPlayer = {
0x56a868b5,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70};
的样子,当然,GUID的具体值还是看你原来粘过来的。
然后把代码改写成:
HRESULT res=CoCreateInstance(CLSID_WindowsMediaPlayer,NULL,CLSCTX_ALL,MYIID_IWMPPlayer,(void**)&LMediaPlayer);
应该就能过了,我也不知道为什么。我在BCB下写DirectShow的时候也出现过同样的问题,自已定义一次GUID就行,我想和没有可用的链接库有关吧,或是BCB不把原来的定义方法作为静态定义解释也有可能。Top




