C#的DllImport如何写这个函数啊?

2025-03-22 18:09:56
推荐回答(4个)
回答(1):

int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
DllImport[...]
int uncompress(byte[] bytes, unlong[] uls, bytes[] bytess, ulong ll);

c差不多是这样的吧,一般来说就是把指针变成数组,类型的话,相对应就行了,
char*什么的就直接放字符串或stringbuilder

回答(2):

[DllImport("dll 名称")]
static extern int uncompress(byte[] destBuffer, uint destLen, byte[]
sourceBuffer, uint sourceLen);

回答(3):

非托管的是 不利用.net 生成的dll
引用 是针对托管的

你dll 必须有这个方法才行
static extern int abc(); 表示声明一个外部实现方法 abc
你的abc方法必须在dll中存在

还有dll不必须注册,注册就是让系统知道它在哪里以及一些信息,你自己指明位置跟注册一个效果

DLLimport支持的是非.net框架下面的dll 如C++ 这类编写的 用.net框架编写出来的dll 就可以直接引用啦

回答(4):

我在C#中调用在EVC中写的一个动态连接库函数报:未处理的“System.MissingMethodException”类型的异常出现在 xxx.exe 中。

在Test.h 中的定义是:

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

TEST_API int mySum(int a,int b);

在Test.cpp 中的实现是:

#include "stdafx.h"
#include "Test.h"

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

TEST_API int mySum(int a,int b)
{
return a+b;
}

在c#中的是这样调用的:

using System.Runtime.InteropServices;

[DllImport("Test.dll")]
static extern int mySum(int a,int b);

int num=mySum(2,3); //在这里就报错
另外,站长团上有产品团购,便宜有保证