"Атрибут DllImportAttribute предоставляет сведения, необходимые для вызова функции, экспортированной из неуправляемой динамической библиотеки (DLL).Минимальным требованием является указание имени динамической библиотеки (DLL), содержащей точку входа."
А вот и пример привязки к gsl. Класс Matrix. Умеет только создаваться и метод для доступа к матрице.
using System;
using System.Runtime.InteropServices;
namespace test
{
class GslMatrix
{
[DllImport("libgsl.dll")]
static extern IntPtr gsl_matrix_alloc(int n1,int n2);
[DllImport("libgsl.dll")]
static extern double gsl_matrix_get(IntPtr m,int i,int j);
[DllImport("libgsl.dll")]
static extern double gsl_matrix_set(IntPtr m,int i,int j,double v);
private IntPtr data;
public int Rows {get;set;}
public int Cols {get;set;}
public GslMatrix(int rows,int cols){
data=gsl_matrix_alloc(rows,cols);
Cols=cols;
Rows=rows;
}
public double this[int i,int j]{
get{
return gsl_matrix_get(data,i,j);
}
set{
gsl_matrix_set(data,i,j,value);
}
}
public override string ToString ()
{
string result="";
for(int i=0;i
for(int j=0;j
result+=string.Format("{0} ",this[i,j]);
result+="\n";
}
return result;
}
}
class MainClass
{
public static void Main (string[] args)
{
var mtr=new GslMatrix(2,2);
mtr[0,0]=1;mtr[0,1]=1;
mtr[1,0]=2;mtr[0,0]=2;
Console.WriteLine(mtr.ToString());
}
}
}
using System;
using System.Runtime.InteropServices;
namespace test
{
class GslMatrix
{
[DllImport("libgsl.dll")]
static extern IntPtr gsl_matrix_alloc(int n1,int n2);
[DllImport("libgsl.dll")]
static extern double gsl_matrix_get(IntPtr m,int i,int j);
[DllImport("libgsl.dll")]
static extern double gsl_matrix_set(IntPtr m,int i,int j,double v);
private IntPtr data;
public int Rows {get;set;}
public int Cols {get;set;}
public GslMatrix(int rows,int cols){
data=gsl_matrix_alloc(rows,cols);
Cols=cols;
Rows=rows;
}
public double this[int i,int j]{
get{
return gsl_matrix_get(data,i,j);
}
set{
gsl_matrix_set(data,i,j,value);
}
}
public override string ToString ()
{
string result="";
for(int i=0;i
for(int j=0;j
result+=string.Format("{0} ",this[i,j]);
result+="\n";
}
return result;
}
}
class MainClass
{
public static void Main (string[] args)
{
var mtr=new GslMatrix(2,2);
mtr[0,0]=1;mtr[0,1]=1;
mtr[1,0]=2;mtr[0,0]=2;
Console.WriteLine(mtr.ToString());
}
}
}
А все привязки к GSL придется руками писать?
ОтветитьУдалитьВидимо да. Я не нашел привязки к нему. Да и вменяемой и живой замены я тоже не нашел.
ОтветитьУдалить