|
c++:
#include "stdafx.h"
#include <iostream>
#include <opencv2\opencv.hpp>
#include <windows.h>
using namespace std;
using namespace cv;
extern "C" __declspec(dllexport) int DC_iR_DF01EF08Info(
HANDLE hDev,
char* ZJLB,
char* ZJHM,
char* JKDAH,
char* XNHZH,
char* errInfo,
char &eigjlie
) {
Mat C = (Mat_<uchar>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
eigjlie = (char)(C.at<uchar>(1, 2));
char *tem;
tem = (char*)C.data;
lstrcpyA(ZJLB, tem);
// lstrcpyA(ZJLB, "01");
lstrcpyA(ZJHM, "110114198003211235");
lstrcpyA(JKDAH, "11011419800321123");
lstrcpyA(XNHZH, "110114198003211235");
return 0;
}
c#
[DllImport("try_test.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
extern static int DC_iR_DF01EF08Info(
IntPtr hDev,
[Out][MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]StringBuilder ZJLB,
[Out][MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]StringBuilder ZJHM,
[Out][MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]StringBuilder JKDAH,
[Out][MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]StringBuilder XNHZH,
[Out][MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]StringBuilder errInfo,
IntPtr eigjlie
);
调用函数:
IntPtr k = new IntPtr();
DC_iR_DF01EF08Info(IntPtr.Zero, zjlb, zjhm, jkdah, xnhzh, errinfo,k);
zjlb为空,k也取不到值,似乎是因为Mat在程序结束后会自动释放内存,那我应该怎么改呢?
|
|