Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Flash ActiveX作为免费注册_C++_Com_Activex - Fatal编程技术网

C++ 使用Flash ActiveX作为免费注册

C++ 使用Flash ActiveX作为免费注册,c++,com,activex,C++,Com,Activex,我有一个使用flash activex组件的游戏 问题是我需要一个特定版本的flash 我不想在现有的更高版本上注册该组件,这会导致严重的安全问题。我只想把它用于我的应用程序 我听说过免费注册com技术在我的应用程序中使用清单文件,但没有找到任何关于将其与flash activex一起使用的信息,甚至没有找到任何可能的信息 所以我的问题是,我们是否可以将flash activex组件作为免注册的com组件?如果是,那么当我的尝试失败时,要求是什么,清单文件应该是什么样子 这是我试过的清单: &l

我有一个使用flash activex组件的游戏

问题是我需要一个特定版本的flash

我不想在现有的更高版本上注册该组件,这会导致严重的安全问题。我只想把它用于我的应用程序

我听说过免费注册com技术在我的应用程序中使用清单文件,但没有找到任何关于将其与flash activex一起使用的信息,甚至没有找到任何可能的信息

所以我的问题是,我们是否可以将flash activex组件作为免注册的com组件?如果是,那么当我的尝试失败时,要求是什么,清单文件应该是什么样子

这是我试过的清单:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="App" version="1.0.0.1" 
        processorArchitecture="x86" publicKeyToken="0000000000000000" />

  <file name="Flash8.ocx">
    <comClass clsid="{D27CDB6E-AE6D-11cf-96B8-444553540000}" threadingModel="Both" />
  </file>
</assembly>

警告:在我给你太多希望之前,我还没有用Flash测试过这一点。我已经用我“拥有”COM客户端和服务器的更小的东西测试了它。如果Flash或它所依赖的某些软件需要除纯COM和ActiveX控件以外的注册表设置,即使如此,清单(例如类别)中不可用的设置也可能不起作用

为闪存安装的每个文件定义一个,该文件与安装期间闪存注册的COM设置相匹配。如果你足够了解COM,---。每个清单文件的名称必须与DLL不同

然后,为可执行文件创建程序集,并在前面选择的文件名之后添加程序集依赖项。如果应用程序没有嵌入式清单,则该清单将是
.exe.manifest
。如果有,则必须使构建工具包含这些依赖项


my-application.exe.manifest


Adobe.Flash.Control.manifest

MacromediaFlashPaper.MacromediaFlashPaper
ShockwaveFlash.ShockwaveFlash.1
ShockwaveFlash.ShockwaveFlash.3
shockwavelash.shockwavelash.4
shockwavelash.shockwavelash.5
ShockwaveFlash,ShockwaveFlash
ShockwaveFlash.ShockwaveFlash.7
ShockwaveFlash.ShockwaveFlash.8
FlashFactory.FlashFactory.1

我使用下面的裸体示例进行了测试,它似乎是有效的。使用Process Explorer,我可以看到它加载了本地Flash8g.ocx:


my-application.cpp
#包括
int-WINAPI-WinMain(
HINSTANCE HINSTANCE,
HINSTANCE HPPrevenstance,
LPSTR lpCmdLine,
国际nCmdShow
)
{
HRESULT-hr;
if(成功(hr=CoInitialize(NULL))){
CLSID-CLSID;
//两种方法都有效
if(成功(hr=CLSIDFromProgID(L“shockwavelash.shockwavelash.8”,&clsid))){
/*if(成功(hr=CLSIDFromString(L“{D27CDB6E-AE6D-11cf-96B8-444553540000},&clsid))){*/
IDispatch*闪光;
//IID_PPV_ARGS更好,但在较旧的SDK中不存在
/*if(成功(hr=CoCreateInstance(clsid,NULL,CLSCTX\u INPROC\u SERVER,IID\u PPV\u ARGS(&flash))){*/
if(成功(hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,IID_IDispatch,(void**)和flash))){
鹰嘴名称[]=L“ReadyState”;
LPOLESTR名称[]={&name[0]};
DISPID DISPID;
if(成功(hr=flash->GetIDsOfNames(IID\u NULL,名称,sizeof(名称)/sizeof(名称[0]),区域设置\u系统\u默认值,&dispid))){
DISPPARAMS-params;
变异结果;
EXCEPINFO EXCEPINFO;
UINT-argerr;
params.rgvarg=NULL;
params.rgdispidNamedArgs=NULL;
参数cArgs=0;
params.cNamedArgs=0;
//由于IDispatch实现有缺陷,初始化出参数
方差(和结果);
excepinfo.wCode=0;
excepinfo.wReserved=0;
excepinfo.bstrSource=NULL;
excepinfo.bstrDescription=NULL;
EXEPINFO.bstrHelpFile=NULL;
excepinfo.dwHelpContext=0;
excepinfo.pvReserved=NULL;
excepinfo.pfnDeferredFillIn=NULL;
excepinfo.scode=S_OK;
argerr=0;
if(成功(hr=flash->Invoke(dispid、IID\u NULL、LOCALE\u SYSTEM\u DEFAULT、DISPATCH\u PROPERTYGET、¶ms、&result、&excepinfo、&argerr))){
MessageBox(NULL,“示例运行到完成”,“Flash测试”,MB_OK);
方差线性(和结果);
SysFreeString(不包括pinfo.bstrSource);
excepinfo.bstrSource=NULL;
SysFreeString(不包括fo.bstrDescription);
excepinfo.bstrDescription=NULL;
SysFreeString(excepinfo.bstrHelpFile);
EXEPINFO.bstrHelpFile=NULL;
}
}
flash->Release();
flash=NULL;
}
}
coninitialize();
}
如果(成功(hr)){
返回0;
}
否则{
返回1;
}
}

没有成功。希望有更具体的示例。@Spider,我添加了示例清单。您可能需要根据实际的GUID、版本等进行调整。非常感谢。我还没有设法让它工作,但我将尝试找到正确的接口描述,并希望它能工作。现在已经很清楚了。@Spider,我已经用Flash 8测试过了0.42.0(AT)和一个裸的'WiMeNe',使用代码> >初始化> <代码>和<代码> COCCREATEAUTION< /COD> > AH,我使用C++ Builder和ActiveActiveCyto生成器。我将尝试更改它。