C#调用C++dll中的类
//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++类,请大家指点
------解决方案--------------------我也不会,关注中!!!!
------解决方案--------------------DllImport
可将该属性应用于方法。
------解决方案--------------------个人觉得,让他们相互调用,还是不太好的!
因语法不同,
不如,让c++ 的编成控制台,用c#与控制台通迅吧。
------解决方案--------------------给个例子
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)
------解决方案--------------------导出类不知道
我是通过一些业务上的设计,改成调用函数,参数和返回值都是基本类型的
------解决方案--------------------建议你在C++中再创建一个cpp文件用作接口, 你可以起名叫ClockInterface.cpp, 然后通过把定义的几个接口函数设定成为__declspec(dllexport)生成dll文件。
在ClockInterface.cpp中你可以设定函数如下:
extern "C" __declspec(dllexport)void* Clock_Init(void **clk)
{
ClockTime *myClock = new ClockTime();
*clk = myClock;
return clk;
}
这样你就能在C#端控制已生成的ClockTime 实例,通过指针来操作,或更改或删除,通过接口文件很好操作
------解决方案--------------------[Quote=引用:]
建议你在C++中再创建一个cpp文件用作接口, 你可以起名叫ClockInterface.cpp, 然后通过把定义的几个接口函数设定成为__declspec(dllexport)生成dll文件。
在ClockInterface.cpp中你可以设定函数如下:
C/C++ code
建议你在C++中再创建一个cpp文件用作接口, 你可以起名叫ClockInterface.cpp, 然后通过把定义的几个接口函数设定成为__declspec(dllexport)生成dll文件。
在ClockInterface.cpp中你可以设定函数如下:
extern "C" __declspec(dllexport)void* Clock_Init(void **clk)
{
ClockTime *myClock = new ClockTime();
*clk = myClock;
return clk;
}
这样你就能在C#端控制已生成的ClockTime 实例,通过指针来操作,或更改或删除,通过接口文件很好操作