从C#到C ++的编组

时间:2009-07-22 15:55:21

标签: c# interop pinvoke

我是C#和visual studio的新手。我有一个C#GUI,它将参数传递给从C ++ DLL导出的函数。 Visual Studio 2005中的平台。

我在c ++ DLL中有一个函数,它接受以下类型的参数: UINT8 UINT16 LPCWSTR someword(以下内容已在c + = dll中定义:typedef void * someword..so基本上someword只是一个void指针。)

你能帮我解决一下如何将参数从我的C#GUI传递到从DLL导入的这个函数。我知道必须使用MarshalAs完成,但我不知道如何。 c ++ dll也是不受管理的。任何帮助都会被贬低。

谢谢, Viren

2 个答案:

答案 0 :(得分:1)

您能否通过提供C ++ DLL的签名来帮助我们?对于您指定的类型,这里是正确的类型

  • UINT8:UInt8
  • UINT16:UInt16
  • LPCWSTR:String(确保在参数上也使用[In] Marshal属性)

你有没有检查过PInvoke Interop助手?它旨在通过将C ++签名转换为等效的DLL导入

来帮助人们完成这些场景

答案 1 :(得分:0)

尝试这样的事情:

[DllImport("lib.dll")]
public static extern int FunctionName(IntPtr somevariable, ushort var1, byte var2, byte var3, byte var4, [MarshalAs(UnmanagedType.LPWStr), In] string str1, [MarshalAs(UnmanagedType.LPWStr), In] string str2);