//C++dll 项目下实现 ClockTime类,编译生成ClockTimeDLL.dll
class __declspec(dllexport) ClockTime
{
private:
int hour;
int second;
int minute;
public:
ClockTime(void);
ClockTime(int aa);
ClockTime(int _hour,int _second,int _mintue);
~ClockTime();
void setHour(int _hour);
int getHour();
};//C# 控制台项目
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;namespace ConsoleUseCppDll
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello,zhangsan.");
ClockTime tt;
tt.setHour(12);
int a=tt.getHour();
Console.WriteLine(a); Console.Read();
} [DllImport("ClockTimeDLL.dll", EntryPoint = "ClockTime", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public extern class ClockTime; [DllImport("ClockTimeDLL.dll", EntryPoint = "ClockTime::setHour", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void setHour(int _hour);
[DllImport("ClockTimeDLL.dll", EntryPoint = "ClockTime::getHour", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int getHour();
}
}编译报错,不知道如何 C#调用C++类,请大家指点
class __declspec(dllexport) ClockTime
{
private:
int hour;
int second;
int minute;
public:
ClockTime(void);
ClockTime(int aa);
ClockTime(int _hour,int _second,int _mintue);
~ClockTime();
void setHour(int _hour);
int getHour();
};//C# 控制台项目
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;namespace ConsoleUseCppDll
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello,zhangsan.");
ClockTime tt;
tt.setHour(12);
int a=tt.getHour();
Console.WriteLine(a); Console.Read();
} [DllImport("ClockTimeDLL.dll", EntryPoint = "ClockTime", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public extern class ClockTime; [DllImport("ClockTimeDLL.dll", EntryPoint = "ClockTime::setHour", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void setHour(int _hour);
[DllImport("ClockTimeDLL.dll", EntryPoint = "ClockTime::getHour", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int getHour();
}
}编译报错,不知道如何 C#调用C++类,请大家指点
解决方案 »
- c# 读取Excel数据,可以指定单元格显示到lebal控件上,求助
- .net用测试DbTransaction实现跨数据库事务
- C#创建了DataSet 填充后如何再读取相应数据
- 帮忙看看,给分的
- 我用jmail发邮件出现乱码.急在线等,谢谢...
- 请问C#中如何合并图像
- 在C#如何启动执行另一个.exe,或.xls,就是说它执行用它的Shell 功能?
- .net自己带的ProgressBar(进度条控件)不太好看,我想自己重新设计一个,谁能给我大体讲一下步骤
- WPF,请教DataGrid的复合表头是怎么做的?
- 怪问题:使用了System.Management,编译报错说Management不在System中,但用SDK编译就可以,为什么?
- 请教一下这个正则表达式
- c#为什么 sql语句sqlstr会运行两次 sqlstr2都没问题
[DllImport("ClockTimeDLL.dll", EntryPoint = "ClockTime", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public extern class ClockTime;
C++ 原型
PXRCPU_API int __stdcall PXRSHNMTeleCheckBlank(HANDLE hComm,int iNodeID,unsigned char *cReceiveData,int *iReceiveDataLen,unsigned int iTimeout);c#
[DllImport("PXRCPU.dll")]
public static extern int PXRSHNMTeleCheckBlank(int hComm, int iNodeID, byte[] cReceiveData,
ref int iReceiveDataLen, uint iTimeout)
extern "C" __declspec(dllexport)void* Clock_Init(void **clk)
{
ClockTime *myClock = new ClockTime();
*clk = myClock;
return clk;
}这样你就能在C#端控制已生成的ClockTime 实例,通过指针来操作,或更改或删除,通过接口文件很好操作
////////////////////////////////////////////////////////
//自定义类别的头文件 WebICAdapter.h
#ifdef DLL_API
#else
#define DLL_API extern "C" __declspec(dllexport)
#endifclass WebICAdapter
{
public:
WebICAdapter(void);
~WebICAdapter(void);
// 测试add函数
int add(int p1, int p2);
};// 返回类别的实例指针
DLL_API void* classInit(void **clsp);
DLL_API int add(WebICAdapter* p, int p1, int p2);////////////////////////////////////////////////////////
//自定义类别的头文件 WebICAdapter.cpp
//=========导出函数============
// 返回类别的实例指针
void* classInit(void **clsp)
{
WebICAdapter* p = new WebICAdapter();
*clsp = p;
return clsp;
}
int add(WebICAdapter* p, int p1, int p2)
{
return p->add(p1,p2);
}
//==========类别实现===========
WebICAdapter::WebICAdapter(void)
{
}
WebICAdapter::~WebICAdapter(void)
{
}
// 测试add函数
int WebICAdapter::add(int p1, int p2)
{
return p1+p2;
}C#定义和调用:
////////////////////////////////////////////////////////
using System.Runtime.InteropServices;
......
//--------------DLL接口定义-----------
[DllImport("SWWebICAdapter.dll", EntryPoint = "classInit", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int classInit(ref int clsPoint); [DllImport("SWWebICAdapter.dll", EntryPoint = "add", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int add(ref int clsPoint, int p1, int p2);
// DLL中的类实例指针
private int _clsPoint = 0; // -----------------------------------
public SWWebIC()
{
InitializeComponent();
// 初始化DLL类实例
_clsPoint = classInit(ref _clsPoint);
}
......
private void buttonDevice_Click(object sender, EventArgs e)
{
int n = add(ref _clsPoint, 11, 12);
MessageBox.Show("计算结果:" + n);
}