我目前正在尝试使用提升的权限从Silverlight 4 Out-Of-browser应用程序调用一些非托管代码。
我的简单测试代码因ArgumentException而失败。
try
{
dynamic watch = AutomationFactory.CreateObject("WatchCOMLib.HighPerformanceWatch");
// Displays ...AutomationMetaObjectProvider
MessageBox.Show(watch.ToString());
// Fails with ArgumentException: Could not convert an argument for the call to GetTimestamp
ulong tsc;
watch.GetTimestamp(out tsc);
MessageBox.Show(tsc.ToString());
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
我使用Visual Studio 2010 ATL模板向导创建了COM库;该方法看起来像
STDMETHODIMP CHighPerformanceWatch::GetTimestamp(ULONGLONG* tsc)
{
// ....
*tsc = result; // result is unsigned __int64
return S_OK;
}
当我简单地将tsc传递给GetTimestamp而不指定out关键字时,不会抛出任何异常,但tsc保持不变。 现在......我如何从非托管库中获取值?
现在,可能缺少大量信息。我已经按照一些Hello-World教程来创建这个COM库,但我真的不知道那里有什么goig。 =) 请询问您需要的任何东西!
答案 0 :(得分:2)
您是否检查过GetTimestamp的IDL定义是否将[out]属性附加到参数?