我目前正在尝试构建一个与COM组件接口的C++库(DLL文件),以使其在Java中可用.我的想法是,我构建了一个非常小的C++ DLL,其中包含一个"包裹"COM组件的类,然后使用SWIG导出它.我使用#import语句得到了很多:
#import "ComponentName.dll"
Run Code Online (Sandbox Code Playgroud)
并调用CoInitialize()并创建组件的实例(通过Visual Studio生成的IComponentNamePtr类).这适用于所有正常的COM方法调用,这很好.
但是,我无法弄清楚如何使事件发挥作用.我看到有一个IComponentNameEventsPtr补充了主要的"智能指针"类,但我无法弄清楚要做些什么才能让它工作
我已经尝试了以下所有方法来使事件发挥作用:
有谁知道如何做到这一点?什么是最简单的方法?我的背景是C#和PHP,所以我在C++中使用COM的经验不多.
tldr:在C++ DLL中使用COM事件最简单的方法是什么?
我一直在尝试使用ReactJS创建基于组件的UI,而不是我通常的一百万个全局函数,变量和不可重用标记的slapdash方法.到目前为止,我真的很喜欢React,但我遇到了绊脚石.
请考虑以下组件布局
EventView
EventViewSidebar
EventViewList
EventViewListRow
EventViewDetail
Run Code Online (Sandbox Code Playgroud)
在此布局中,EventViewListRow
每个唯一键存在多次出现.单击EventViewListRow
应该更新的实例EventViewDetail
以及该项目的详细信息.
这是render
顶级EventView
组件的功能:
render: function () {
return (
<div className="event-view row-fluid">
<div className="event-view__sidebar col-md-4">
<EventViewSidebar projectId={this.state.projectId} />
</div>
<div className="event-view__content col-md-8" id="eventDetail">
</div>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
这是EventViewDetail
组件
var EventViewDetail = React.createClass({
getInitialState: function () {
return { eventId: 0 };
},
render: function () {
if (this.state.eventId === 0) {
return (<h3>Nothing selected</h3>);
}
else {
return (
<div>
{this.state.eventId}
</div> …
Run Code Online (Sandbox Code Playgroud)