在ATL中加入带SAFEARRAY参数的方法

问题

  1. 建立一个默认的项目
  2. 利用New ATL Object向导添加Objects/simple object.
  3. 在idl文件中定义一个结构:全部文件如下
cpp 复制代码
// Del_0.idl : IDL source for Del_0.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (Del_0.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

typedef
[uuid(def9b53e-08f9-4042-b5bb-43eef37d18e6)]
struct MyTX
{
long x;
long y;
}MyTX; //自定义结构

[
object,
uuid(1B27E58D-B3C4-4F4F-9E63-4601D6694ABA),
dual,
helpstring("IDel_x0 Interface"),
pointer_default(unique)
]
interface IDel_x0 : IDispatch
{
};

[
uuid(1E62057B-D554-488B-AE21-22AAA946490F),
version(1.0),
helpstring("Del_0 1.0 Type Library")
]
library DEL_0Lib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(10A019E0-71C4-47B6-A5F4-8E247B58F0F5),
helpstring("_IDel_x0Events Interface")
]
dispinterface _IDel_x0Events
{
properties:
methods:
};

[
uuid(9A18A96E-FB9C-463D-A3C7-0A8E8D36C2BE),
helpstring("Del_x0 Class")
]
coclass Del_x0
{
[default] interface IDel_x0;
[default, source] dispinterface _IDel_x0Events;
};
};
  1. 想加入方法 HRESULT GetStructValue([in] SAFEARRAY(MyTX)* pValue);

过程如下:

在接口的右键菜单的选择"Add Method",在随后的对话框中的方法名称中输入"GetStructValue"

在参数中输入"[in] SAFEARRAY(MyTX)* pValue",

接下来确定添加,此时出现问题,VC弹出对话框"Unable to create the function because the header or implementation file could not be found",不能添加.

这是什么原因呢?

解决方法

通过手动添加:

  1. 在idl文件中增加
cpp 复制代码
[id(9), helpstring("method SetEqualizerArray")] HRESULT SetEqualizerArray([in] SAFEARRAY(short)* dbGainArray);
  1. 在.h文件中声明
cpp 复制代码
STDMETHOD(SetEqualizerArray)(/*[in]*/ SAFEARRAY** dbGainArray);
  1. 在.cpp文件中实现
cpp 复制代码
STDMETHODIMP CAudioPlayer::SetEqualizerArray(SAFEARRAY** dbGainArray)
{
	// TODO: Add your implementation code here
	
	return S_OK;
}
相关推荐
星辰徐哥18 小时前
鸿蒙APP开发从入门到精通:ArkUI组件库详解与常用组件实战
华为·app·harmonyos·组件·arkui·组件库
ujainu19 小时前
Flutter + OpenHarmony 开关与选择器:Switch、Checkbox、Radio 与 DropdownButton 的无障碍适配
flutter·组件
ujainu1 天前
Flutter + OpenHarmony 图片加载:Image 组件与 BoxFit、缓存策略在 OpenHarmony 设备上的优化
开发语言·php·组件
ujainu1 天前
Flutter + OpenHarmony 卡片式布局:Card 与 ListTile 在信息聚合界面(如服务卡片)中的应用
flutter·组件
ujainu1 天前
Flutter + OpenHarmony 抽屉菜单:Drawer 与 NavigationRail 在平板与折叠屏设备上的响应式导航设计
flutter·组件
ujainu2 天前
Flutter + OpenHarmony 网格布局:GridView 与 SliverGrid 在鸿蒙设备内容展示中的应用
android·flutter·组件
ujainu2 天前
Flutter + OpenHarmony 弹出反馈:SnackBar、SnackBarAction 与 ScaffoldMessenger 的轻量提示规范
flutter·组件
ujainu2 天前
Flutter + OpenHarmony 底部导航栏:BottomNavigationBar 与 BottomAppBar 在多入口场景中的深度实践
flutter·组件
赞哥哥s3 天前
Autosar Com信号收不到排查-基于ETAS软件
can·autosar·com