使用ATL的参数类型

时间:2012-02-16 07:33:10

标签: visual-studio visual-studio-2008 atl

我正在尝试使用ATL创建一个非托管COM dll,它反映了我之前创建的C#dll。但是,当我向界面添加方法时,我遇到了一个问题并且无法找到解决方案。为了说明,我将包括用C#编写的接口:

public unsafe interface IUserIDA
{
    [DispId(1)]
    void SwitchCriteria(ref double intensity, ref double minMass, ref double maxMass, ref bool selectIntensity, ref long numOfDepCycles);

    [DispId(2)]
    void ChargeStateParam(ref short minCharge, ref short maxCharge, ref bool doChargeState);

    [DispId(3)]
    void InclusionList(ref double intensity, ref double theList, ref short numOfItems);

    [DispId(4)]
    void ExclusionList(ref long exRTWindow, ref double theMassList, ref long theRTList, ref short numOfItems);

    [DispId(5)]
    void OtherCriteria(ref long smartFilterTime, ref double isoExclusionWin, ref double massTolerance, ref bool isPPM);

    [DispId(6)]
    void IsotopeMatchParam(ref double theMassList, ref double theAbundanceList, ref short numOfItems, ref  double abTolerance, ref double maTolerance);

    [DispId(7)]
    void InitIDA();

    [DispId(8)]
    void SurveySpec();

    [DispId(9)]
    void NextScan(double* selectedMasses, double* SelectedIntensities, long* selectedCharges, int itemCount);

}

当我尝试在我的ATL项目中重现这一点时(使用visual studio 2008),我发现没有列出许多数据类型:布尔值和整数类型。应该使用什么类型?

1 个答案:

答案 0 :(得分:0)

c#中的boolean确实是C ++中的bool,你可以这样做。但是,在标准COM接口中,您应该使用BOOL或LONG。 同上整数。使用LONG。 @Travis给了你很好的建议。在Visual Studio中,打开“类视图”窗口(从“视图”菜单中),右键单击界面,选择“添加”,然后选择“添加方法”或“添加属性”。这将打开一个很好的UI,它将指导您完成COM接口的定义。