【发布时间】:2018-05-13 20:40:46
【问题描述】:
我正在尝试在IWiaDevMgr2 上致电GetImageDlg。有许多相当复杂的方法(我没有使用)引用了许多类型(我也没有使用)。由于我找不到用于自动生成 ComImport 的 TLB 或 IDL,因此我宁愿避免手动翻译所有引用的类型。
我可以通过替换来“跳过”方法和类型
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("79C07CF1-CBDD-41ee-8EC3-F00080CADA7A")]
public interface IWiaDevMgr2
{
IEnumWIA_DEV_INFO EnumDeviceInfo(
int lFlags);
IWiaItem2 CreateDevice(
int lFlags,
[MarshalAs(UnmanagedType.BStr)] string bstrDeviceID);
// ...snip five other method declarations...
IWiaItem2 GetImageDlg(
int lFlags,
[MarshalAs(UnmanagedType.BStr)] string bstrDeviceID,
IntPtr IntPtrParent,
[MarshalAs(UnmanagedType.BStr)] string bstrFolderName,
[MarshalAs(UnmanagedType.BStr)] string bstrFilename,
/* [out] */ out int plNumFiles,
/* [size_is][size_is][out] */ [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5, ArraySubType = UnmanagedType.BStr)] out string[] ppbstrFilePaths);
};
到
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("79C07CF1-CBDD-41ee-8EC3-F00080CADA7A")]
public interface IWiaDevMgr2_Fake
{
void VTablePlaceholder0();
void VTablePlaceholder1();
void VTablePlaceholder2();
void VTablePlaceholder3();
void VTablePlaceholder4();
void VTablePlaceholder5();
void VTablePlaceholder6();
[return: MarshalAs(UnmanagedType.Interface)]
object GetImageDlg(
int lFlags,
[MarshalAs(UnmanagedType.BStr)] string bstrDeviceID,
IntPtr IntPtrParent,
[MarshalAs(UnmanagedType.BStr)] string bstrFolderName,
[MarshalAs(UnmanagedType.BStr)] string bstrFilename,
/* [out] */ out int plNumFiles,
/* [size_is][size_is][out] */ [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5, ArraySubType = UnmanagedType.BStr)] out string[] ppbstrFilePaths);
};
一切似乎都可以正常工作,只要我不调用任何占位符。我可以这样做没有后果吗?
【问题讨论】:
标签: c# com pinvoke com-interop