【发布时间】:2013-04-11 07:01:52
【问题描述】:
我有这个 c++ 函数:
unsigned int ReadUserMemory( unsigned char *lpBuffer, unsigned int iAddress, unsigned int nNumberOfByte );
它从内存的iAddress 中读取nNumberOfByte 字节并将其放入lpBuffer。
我用这个接口为它创建了一个 ATL 对象(将在 C# 中使用):
[id(6), helpstring("method ReadUserMemory")] HRESULT ReadUserMemory(BYTE* lpBuffer, [in] ULONG iAddress, [in] ULONG nNumberOfByte, [out,retval] ULONG* result);
我既不是 C# 程序员也不是经验丰富的 ATL 程序员!现在我将用这段代码在 C# 中测试这个函数:
byte [] b = new byte[100];
axObj.ReadUserMemory(b, 0, 100);
但显然这段代码是错误的。如何调用这个方法?提前致谢。
【问题讨论】:
-
您是否有理由使用 COM 而不是 C++ 互操作。后者实际上要容易得多。
-
@PeterR ~> 只是因为我老板想要!他想在其他语言中毫无问题地使用这个对象!
-
您还应该考虑使用Marshal.Copy 方法(IntPtr, Byte[], Int32, Int32)。它内置在 .NET 中,可以执行您的功能似乎可以执行的操作。
-
@Tom Blodget 如果可行(看起来应该可行),这可能是一个更好的前进方向