c #如何调用dll并传参

c #如何调用dll并传参,第1张

dll只是类库,类库里定义了什么,静态函数还是类,你都没说明。

如果你的DLL也是用C#写的,那我觉得C#调用DLL是最简单的。

将已编译的DLL引入当前项目,在代码文件中using该DLL的命名空间,然后就像本地一样访问了。

如果DLL里是类,就直接可以用类实例化对象,然后调用传递,如果是静态类,那就不用实例化一步直接调用。

腾讯电脑管家可以帮助修复

a进入管家的首页后,点击右上角的“工具箱”按钮,点击“电脑诊所”

b进入“电脑诊所”找到“软件硬件”点击“丢失dll文件”最后“一键修复”界面

可以根据自己d出的对话框中显示的无法启动程序是丢失的何种dll文件,找到对应的后,鼠标轻轻放在该项上,当出现了“立即修复”按钮后点击“立即修复”按钮。

完成以上步骤后,系统便自行修复了dll文件丢失的故障了,完成了修复

1、将对话框资源初始化使用函数参数的方式传递,然后根据传入参数进行对话框的实例化。

与一般的传递一样,只是将实例化放入DLL的函数中。

2、也可能有其它形式资源参数的传递需求吧。

C#无法直接调用这种参数的函数,C#中你描述的那种二维数组,本质上跟一维数组一致。倒是single[][]跟float是类似的,但是也不能直接传递。

然后具体说说

float arr arr为指向float型的指针

single[] arr arr为single型数组的引用,当传递给API时,会自动传递内部指针,这个指针才真真的指向single型的指针

float arr arr为一个指向float型指针的指针,即arr[]应该是一个float型指针

single[][] arr arr为一个single型数组引用的数组引用,这意味着arr的内部指针指向的是single[]型引用的指针,跟指向single型指针完全是两码事

综上所述,C#不能直接调用Test(float arr,int rows,int cols),你必须使用非安全代码构造一个single[],然后将这个数组传递过去。下面是一个例子

[DllImport("testdll")]

static extern unsafe bool Test(float[] arr, int row, int col);//这里arr要声明为float[],使用起来比较方便

bool CallTest(float[,] arr)

{

int row = arrGetUpperBound(0) + 1;

int col = arrGetUpperBound(1) + 1;

unsafe

{

fixed(float fp=arr)

{

float[] farr=new float[row];

for (int i = 0; i < row;i++ )

{

farr[i] = fp + i col;

}

return Test(farr, row, col);

//如果Test(float arr, int row, int col)这样声明,就要用下面的方法调用

//fixed(float fpp=farr)

//{

// return Test(fpp, row, col);

//}

}

}

}

可以采用导入数值的方法。(如你所说将dll的值导入EXE中)如下所示:

在DLL中:

_declspec(dllexport) float fPointX;

在EXE中:

_declspec(dllimport) float fPointX;

不过此种方法有一个缺陷,只能在一个EXE和一个DLL中导入数据,而不能在一个EXE和多个DLL中共享数据。遇到后一种情况的时候:如果你仍然需要传输数据,可以在每个DLL中定义一个函数来传递数据。例如:CMyClass (在DLL中定义的类,用扩展型MFC动态链接类型)

Class CMyClass

{

public:

float GetPointX();

void GetPointX(float p_PointX);

};

在EXE中:

CMyClass MyClass;

MyClassGetPointX();

或者:

float fX;

MyClassGetPointX(&fX);

注:后一种方法对所有情况都适用。祝好运!

以上就是关于c #如何调用dll并传参全部的内容,包括:c #如何调用dll并传参、求解,怎么主程序和DLL子模块共享数据、mfc 主程序在DLL对话框资源显示之前传递DLL对话框初始化参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9822383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存