1
嗨,所有 我試圖從我的非託管c-dll獲取數據。 c函數需要一個指向結構的指針,用一些值初始化結構並完成。這個錯誤可能在任何地方,即使在C DLL聲明。 (我在這做了第一次)調用結構指針的C函數作爲參數
這裏的C代碼h文件:
#ifndef MYFUNCS_H
#define MYFUNCS_H
__declspec(dllexport) typedef struct t_Point{
int x;
int y;
} Point;
__declspec(dllexport) Point myFuncs();
__declspec(dllexport) int getPoint(Point* point);
#endif
C-文件:
#include "stdafx.h"
#include "OpenCVTest.h"
int getPoint(Point* point){
point->x = 4;
point->y = 2;
return 0;
}
在C#中的包裝:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace CSharp_mit_OpenCV
{
[StructLayout(LayoutKind.Sequential)]
public struct Point
{
public int x;
public int y;
};
class Wrapper
{
[DllImport("OpenCV Test.dll", CharSet= CharSet.Auto)]
public static extern int getPoint(ref Point point);
}
}
而使用該包裝的c#函數:
Point p = new Point();
Wrapper.getPoint(ref p);
textBox1.Text = p.x.ToString();
textBox2.Text = p.y.ToString();
有了這個代碼,我得到以下運行時錯誤:
「來的PInvoke函數調用‘CSHARP麻省理工學院的OpenCV CSharp_mit_OpenCV.Wrapper ::用GetPoint!’的不平衡堆棧。這很可能是因爲託管的PInvoke簽名與非託管目標籤名不匹配。檢查調用約定和的PInvoke簽名的參數相匹配的非託管的目標籤名。」
有什麼不對嗎?請幫幫忙! 謝謝大家!