c++代码 打包 dll 给 c#使用
这几个方法 如何实现
尤其带参数Ploy&的函数 如何在extern c里面定义和实现,要完整代码,谢谢
我的c++代码如下
#pragma once
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
/////////////////////////////////////////////
//提供C#代码使用
/////////////////////////////////////////////
extern "C" {
//下面代码可能不对
__declspec(dllexport) void* poly_create(int nn, double *pp);
__declspec(dllexport) void poly_poly_mul(void* ptr1,void* ptr2);
__declspec(dllexport) void
}
public class Poly
{
private:
int N; //多项式次数
double *p; //多项式系数存储空间首地址
public:
Poly(int nn=0, double *pp=NULL) //构造函数
{
N = nn; p=pp;
}
double poly_value(double); //多项式求值
void poly_mul(Poly&,Poly&); //多项式相乘
void poly_div(Poly&,Poly&,Poly&); //多项式相除
};
/////////////////////////////////////////////
//多项式相乘 s = p*q
/////////////////////////////////////////////
void Poly::poly_mul(Poly& q, Poly& s)
{
int i,j;
for (i=0; i<=s.N; i++) s.p[i]=0.0;
for (i=0; i<=N; i++)
for (j=0; j<=q.N; j++)
s.p[i+j]=s.p[i+j] + p[i]*q.p[j];
return ;
}
/////////////////////////////////////////////
//多项式相除 s = p/q 余 r
/////////////////////////////////////////////
void Poly::poly_div(Poly& q, Poly& s, Poly& r)
{
int i,j,mm,ll;
for (i=0; i<=s.N; i++) s.p[i]=0.0;
if (q.p[q.N]+1.0==1.0) return;
ll=N;
for (i=(s.N)+1; i>=1; i--)
{
s.p[i-1]=p[ll]/(q.p[q.N]);
mm=ll;
for (j=1; j<=q.N; j++)
{
p[mm-1]=p[mm-1]-s.p[i-1]*(q.p[(q.N)-j]);
mm=mm-1;
}
ll=ll-1;
}
for (i=0; i<=r.N; i++) r.p[i]=p[i];
return;
}