namespace dlltest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); }
[DllImport("identify.dll")]
public static extern void getinfo(int[] b,string cwtxt);
[DllImport("identify.dll")]
public static extern int tell(int[] coordinateInner,int[] coordinateOuter,string cspic); private void button1_Click(object sender, RoutedEventArgs e)
{
int frag1;
int[] b;
b = new int[16];
int[] coordinateInner;
coordinateInner = new int[8];
int[] coordinateOuter;
coordinateOuter = new int[8];
string cspic;
string cwtxt;
cwtxt = "D:\\1234.txt";
getinfo(b, cwtxt);
coordinateOuter[0] = b[9];
coordinateOuter[1] = b[11];
coordinateOuter[2] = b[13];
coordinateOuter[3] = b[15];
coordinateOuter[4] = b[8];
coordinateOuter[5] = b[10];
coordinateOuter[6] = b[12];
coordinateOuter[7] = b[14]; coordinateInner[0] = b[1];
coordinateInner[1] = b[3];
coordinateInner[2] = b[5];
coordinateInner[3] = b[7];
coordinateInner[4] = b[0];
coordinateInner[5] = b[2];
coordinateInner[6] = b[4];
coordinateInner[7] = b[6];
cspic = "D:\\待测图像1.bmp";
frag1 = tell(coordinateInner, coordinateOuter, cspic);
if (frag1 == 1) MessageBox.Show("cwnyc"); else MessageBox.Show("cwk");
}
}
}
identify.dll在vc下调用没有问题,现在改用c#调用,程序运行时提示调用函数getinfo时貌似参数不符.....求解........
我在dll中给出的定义如下:void getinfo(int b[16],const char* cwtxt)
int tell(unsigned int coordinateInner[8],unsigned int coordinateOuter[8],const char* cspic)
dll是用vc写的
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); }
[DllImport("identify.dll")]
public static extern void getinfo(int[] b,string cwtxt);
[DllImport("identify.dll")]
public static extern int tell(int[] coordinateInner,int[] coordinateOuter,string cspic); private void button1_Click(object sender, RoutedEventArgs e)
{
int frag1;
int[] b;
b = new int[16];
int[] coordinateInner;
coordinateInner = new int[8];
int[] coordinateOuter;
coordinateOuter = new int[8];
string cspic;
string cwtxt;
cwtxt = "D:\\1234.txt";
getinfo(b, cwtxt);
coordinateOuter[0] = b[9];
coordinateOuter[1] = b[11];
coordinateOuter[2] = b[13];
coordinateOuter[3] = b[15];
coordinateOuter[4] = b[8];
coordinateOuter[5] = b[10];
coordinateOuter[6] = b[12];
coordinateOuter[7] = b[14]; coordinateInner[0] = b[1];
coordinateInner[1] = b[3];
coordinateInner[2] = b[5];
coordinateInner[3] = b[7];
coordinateInner[4] = b[0];
coordinateInner[5] = b[2];
coordinateInner[6] = b[4];
coordinateInner[7] = b[6];
cspic = "D:\\待测图像1.bmp";
frag1 = tell(coordinateInner, coordinateOuter, cspic);
if (frag1 == 1) MessageBox.Show("cwnyc"); else MessageBox.Show("cwk");
}
}
}
identify.dll在vc下调用没有问题,现在改用c#调用,程序运行时提示调用函数getinfo时貌似参数不符.....求解........
我在dll中给出的定义如下:void getinfo(int b[16],const char* cwtxt)
int tell(unsigned int coordinateInner[8],unsigned int coordinateOuter[8],const char* cspic)
dll是用vc写的
比较菜,希望说详细些
EntryPoint="getinfo",
CallingConvention =CallingConvention.Cdecl, //注意,这里对应你VC实际的调用约定
CharSet=CharSet.Ansi]
public static extern void getinfo(int[] b,string cwtxt);
指向在click事件中调用的另一个函数tell就是frag1=tell(....)这一行,这个.....又是为什么呢?
EntryPoint="tell",
CallingConvention =CallingConvention.Cdecl, //注意,这里对应你VC实际的调用约定
CharSet=CharSet.Ansi)]
public static extern int tell(uint[] coordinateInner,uint[] coordinateOuter,string cspic);
int tell(unsigned int coordinateInner[8],unsigned int coordinateOuter[8],const char* cspic)
C#:
[DllImport("identify.dll",EntryPoint="tell",CallingConvention =CallingConvention.Cdecl,CharSet=CharSet.Ansi)]
public static extern int tell(uint[] coordinateInner,uint[] coordinateOuter,string cspic); 如果上一个没问题,从同一个dll来的,应该一样没有问题才对,你把C#这边的调用代码贴出来
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.InteropServices;namespace dlltest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); }
[DllImport("identify.dll",EntryPoint="getinfo",CallingConvention =CallingConvention.Cdecl,CharSet=CharSet.Ansi)]
public static extern void getinfo(int[] b,string cwtxt);
[DllImport("identify.dll",EntryPoint="tell",CallingConvention =CallingConvention.Cdecl,CharSet=CharSet.Ansi)]
public static extern int tell(uint[] coordinateInner,uint[] coordinateOuter,string cspic); private void button1_Click(object sender, RoutedEventArgs e)
{
int frag1;
int[] b;
b = new int[16];
uint[] coordinateInner;
coordinateInner = new uint[8];
uint[] coordinateOuter;
coordinateOuter = new uint[8];
string cspic;
string cwtxt;
cwtxt = "D:\\1234.txt";
getinfo(b, cwtxt);
coordinateOuter[0] = (uint)b[9];
coordinateOuter[1] = (uint)b[11];
coordinateOuter[2] = (uint)b[13];
coordinateOuter[3] = (uint)b[15];
coordinateOuter[4] = (uint)b[8];
coordinateOuter[5] = (uint)b[10];
coordinateOuter[6] = (uint)b[12];
coordinateOuter[7] = (uint)b[14]; coordinateInner[0] = (uint)b[1];
coordinateInner[1] = (uint)b[3];
coordinateInner[2] = (uint)b[5];
coordinateInner[3] = (uint)b[7];
coordinateInner[4] = (uint)b[0];
coordinateInner[5] = (uint)b[2];
coordinateInner[6] = (uint)b[4];
coordinateInner[7] = (uint)b[6];
cspic = "D:\\待测图像1.bmp";
frag1 = tell(coordinateInner, coordinateOuter, cspic);
if (frag1 == 1) MessageBox.Show("cwnyc"); else MessageBox.Show("cwk");
}
}
}
没有error,只是运行时报那个错attempt to 。
1、加上try{}catch{}
2、屏蔽下面代码在测试: //coordinateOuter[0] = (uint)b[9];
//coordinateOuter[1] = (uint)b[11];
// coordinateOuter[2] = (uint)b[13];
//coordinateOuter[3] = (uint)b[15];
//coordinateOuter[4] = (uint)b[8];
//coordinateOuter[5] = (uint)b[10];
//coordinateOuter[6] = (uint)b[12];
//coordinateOuter[7] = (uint)b[14]; //coordinateInner[0] = (uint)b[1];
//coordinateInner[1] = (uint)b[3];
//coordinateInner[2] = (uint)b[5];
//coordinateInner[3] = (uint)b[7];
//coordinateInner[4] = (uint)b[0];
//coordinateInner[5] = (uint)b[2];
//coordinateInner[6] = (uint)b[4];
//coordinateInner[7] = (uint)b[6];