我尝试在#import
msdia140.dll
上使用#import
命令。
是的,我知道接口已有一个头文件,但我想使用智能COM指针,因此使用#import "bin/msdia140.dll" \
rename("virtual", "Virtual")\
exclude( \
"IStream" \
, "ISequentialStream" \
, "_LARGE_INTEGER" \
, "_ULARGE_INTEGER" \
, "tagSTATSTG" \
, "_FILETIME" \
, "IEnumUnknown")
命令。
我使用的导入命令是:
...App::InitInstance()
重命名是由于关键字冲突造成的,排除是为了摆脱导入名称已存在的类型的警告。
在CoInitialize(NULL);
函数中,我致电...App::ExitInstance()
,CoUninitialize();
我CComPtr<IDiaDataSource> pSource;
CoCreateInstance( CLSID_DiaSource,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof( IDiaDataSource ),
(void **) &pSource);
。
现在我试图做相当于:
Dia2Lib::IDiaDataSourcePtr dataSource;
dataSource.CreateInstance(__uuidof(Dia2Lib::IDiaDataSource));
如说明Debug Interface Access SDK中所述,但没有成功。我试过的命令是:
NULL
但智能指针仍为using System;
using System.Windows;
using System.Windows.Controls;
public static class Filter
{
public static readonly DependencyProperty ByProperty = DependencyProperty.RegisterAttached(
"By",
typeof(Predicate<object>),
typeof(Filter),
new PropertyMetadata(default(Predicate<object>), OnByChanged));
public static void SetBy(ItemsControl element, Predicate<object> value)
{
element.SetValue(ByProperty, value);
}
public static Predicate<object> GetBy(ItemsControl element)
{
return (Predicate<object>)element.GetValue(ByProperty);
}
private static void OnByChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is ItemsControl itemsControl &&
itemsControl.Items.CanFilter)
{
itemsControl.Items.Filter = (Predicate<object>)e.NewValue;
}
}
}
。我做错了什么?
答案 0 :(得分:0)
查看CreateInstance()的返回值。它会告诉你问题,或者至少是第一个问题。
我看到的一个问题是:
Dia2Lib::IDiaDataSourcePtr dataSource;
dataSource.CreateInstance(__uuidof(Dia2Lib::IDiaDataSource));
应该是:
Dia2Lib::IDiaDataSourcePtr dataSource;
HRESULT hr = dataSource.CreateInstance(__uuidof(Dia2Lib::DiaSource));
您正在使用接口ID而不是coclass的CLSID - 这将永远是一个问题。