0

我仍在努力从 ac 静态库中调用一些函数。我在这个toms 包装器之后用 Visual Studio 围绕静态库编写了一个包装器,现在可以访问 c# 端的函数,但是在处理它们时我遇到了一些错误。

所以这里是函数看起来原来的样子:

ZEXTERN Int32 ZEXPORT compressZIP OF((unsigned char *dest,   Uint32 destLen,
                             unsigned char *source, Uint32 sourceLen,
                             Uint32 *_crc32));

这导致在 c# 方面

public int compressZIP(byte* dest, uint destLen, byte* source, uint sourceLen,
                            uint* _crc32);

所以,现在我被指针问题困住了,我尝试了类似的东西

byte[] data = new byte[size]
(fixed ptr = data)

并将ptrs传递给函数。但我总是最终会出现一些内存违规或其他内存异常。

当我调用看起来有点相同的 uncompressZIP 时,我得到 2 个正确的未压缩字符,但只有栅栏的东西。

有人可以帮我填写函数的正确参数吗?

4

1 回答 1

1

不要将它声明为 C# 端的指针,而是作为字节数组。并确保包括OutAttribute

一个工作示例:

[DllImport("PixelFlowIE.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "PixelFlow")]
private static extern void PixelFlowDLL([In, Out] Node[] gi, int width, int height, SourceInfo[] sources, int sourceCount, int iterations, int iterPerPeriod, ProgressCallback prg);
于 2012-04-26T16:09:03.700 回答