C#调用C++生成的dll,参数有结构体数组
2014-12-15 20:10
447 查看
废话少说,只上程序。
C++生成dll程序:
C#中调用他的程序:
以上程序,经过测试,没有问题。
1、dll工程>>属性>>配置属性>>生成>>选择目录文件夹为要调用该dll文件的工程的bin文件夹
2、在要调用该dll文件的工程中添加引用该dll(dll文件在该工程的bin文件夹中)
3、在dll工程中设置断点
4、按F5即可进入调试
C++生成dll程序:
/* 实现功能:将一个图片中,所在行的像素值,按照一定的间隔(列数),将对应点的像素值提取出来。 */ #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/core/core.hpp" #include <iostream> #include <stdio.h> #include <time.h> using namespace std; using namespace cv; struct Node { int R; int G; int B; }; extern "C" _declspec(dllexport) bool operator_Image(char *path , int rownum,int intervalNum,struct Node *Result,int *Num) { Mat src = imread(path); int rows,cols; int x = 0,y = 0; //cout << src.row(100) << endl; rows = src.rows; cols = src.cols; if (src.empty()) { cout << "图片不存在!" << endl; } if (rows < intervalNum) { cout << "你输入的间隔有误!!" << endl; } //创建动态数组,用来保存像素的值 //Result = new int[cols/intervalNum*3*sizeof(int)]; //int savedata[10000] = {0}; *Num = cols/intervalNum*3; int i = 0; while(x<cols) { y = rownum; //Result[i++] = src.at<Vec3b>(y,x)[0]; //Result[i++] = src.at<Vec3b>(y,x)[1]; //Result[i++] = src.at<Vec3b>(y,x)[2]; Result[i].G = src.at<Vec3b>(y,x)[0]; Result[i].B = src.at<Vec3b>(y,x)[1]; Result[i].R = src.at<Vec3b>(y,x)[2]; /*if (x%100 == 0) { printf("%d ",src.at<Vec3b>(y,x)[0]); printf("%d ",src.at<Vec3b>(y,x)[1]); printf("%d ",src.at<Vec3b>(y,x)[2]); }*/ x = x+intervalNum; i++; } return true; }
C#中调用他的程序:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; public struct Node { int R; int G; int B; }; namespace TestLSPVC { public partial class Form1 : Form { [DllImport("readcolpixelDll.dll", EntryPoint = "operator_Image", CharSet = CharSet.Ansi)] public static extern bool operator_Image(string path , int rownum,int intervalNum, ref Node Result,ref int Num); public Form1()<img alt="大笑" src="https://oscdn.geek-share.com/Uploads/Images/Content/201603/899229cfab2c02d614490485cabb781b.gif" /> { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string path = "c:\\lena.jpg"; Node[] x = new Node[1000]; int Count=0; operator_Image(path,100,100,ref x[0],ref Count); } } }
以上程序,经过测试,没有问题。
DLL工程调试步骤:
1、dll工程>>属性>>配置属性>>生成>>选择目录文件夹为要调用该dll文件的工程的bin文件夹2、在要调用该dll文件的工程中添加引用该dll(dll文件在该工程的bin文件夹中)
3、在dll工程中设置断点
4、按F5即可进入调试
相关文章推荐
- PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
- 【原创】PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
- C#调用c++的dll,结构体数组作为引用参数的传递方式
- c# 调用 c++ dll 参数为结构体数组指针
- C#调用C++ 平台调用P/Invoke 结构体--输入输出参数、返回值、返出值、结构体数组作为参数【五】
- C#调用c++Dll 结构体数组指针的问题
- C#调用C++dll 结构体参数传递问题
- C#调用C++dll 结构体参数传递问题
- 函数调用,C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C# 调用Dll中非托管C++代码,函数参数的类型对照
- c# 调用 研华库函数中 C++ 非托管 Dll 一例(包含指针成员的结构体的调用)
- 用VS2008生成C++代码的dll及在C#中的调用及常见的类型转换
- 在VB中调用C/C++语言编写的dll,数组参数的传递
- C#调用外部C++生成DLL
- 互操作性----C# 调用 C++生成的DLL
- C# 发中调用一个采用C++封装好的dll, 其结构体中的二维数转换
- c#调用c++ dll 参数对应
- c# 调用 研华库函数中 C++ 非托管 Dll 一例(包含指针成员的结构体的调用)
- C# 调用Dll中非托管C++代码时,函数参数的类型对照
- C#调用vb dll 参数传递--数组、整型等(c#调用com)