【发布时间】:2015-05-03 12:58:44
【问题描述】:
我有一个 COM 本地服务器(用 C++ 实现),我试图从 C# 代码调用它。给我带来麻烦的方法如下所示:
HRESULT Foo([in] const WCHAR* bar);
参数在 C# 端显示为 ref ushort,但我想将字符串传递给方法,而不是数字。如何让这个方法接受来自 C# 的字符串?
C# 非常简单:
IFooService service = new IFooService();
service.Foo("blah blah");
我看到了描述 DllImporting 函数然后在参数上使用 [MarshalAs(UnmanagedType.LPWStr)] 的其他答案,但是由于 COM 服务器作为本地服务器运行(意味着它是独立的 exe 而不是 dll),它是界面的一部分,我不认为我可以DllImport 它。我需要对服务器的代理 dll 做些什么吗?
【问题讨论】:
-
您使用的是什么版本的 C#?例如。你可以访问
dynamic吗? -
4,所以我可以访问
dynamic。当我将动态字符串传递给该方法时,我得到:An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll Additional information: 'object' does not contain a definition for 'Foo'我猜这是因为该方法的版本没有接受字符串。 -
您试图在什么对象上调用
Foo方法?您能否发布实际的方法调用。 -
@ShaunLuttin,我在问题中添加了方法调用。
-
好,那么在界面中使用
BSTR会好很多。整体上更容易编组,C# 将通过String那里,而无需您付出任何努力。