/**
* @file IAudienceManager.h
* @author Jenny
* @date May 7, 2012
*
* @brief Interface of Audience Manager.
*/#ifndef _AUDIENCE_MANAGER_H_
#define _AUDIENCE_MANAGER_H_#define _API_IAUDIENCE_EXPORT#define _IAUDIENCE_EXTERN extern "C"#if defined _API_IAUDIENCE_EXPORT
#define _IAUDIENCE_EXPORT __declspec(dllexport)
#define _IAUDIENCE_STDCALL __stdcall
#else
#define _IAUDIENCE_STDCALL
#define _IAUDIENCE_EXPORT
#endiftypedef int INT32;
typedef unsigned int UINT32;
typedef short SINT16;typedef struct AUDIENCE
{
INT32 X; INT32 Y;
INT32 W; INT32 H;
int gender; int age;
float watchingtime; struct
{
SINT16 year;
SINT16 mon;
SINT16 day;
SINT16 hour;
SINT16 min;
SINT16 sec;
} turnupTM;
//ID label of the audience;
UINT32 audID;
}AUDIENCE;
class IAudienceManager
{
public: virtual void _IAUDIENCE_STDCALL UpdateFrame(const char *bFrame)=0;
virtual UINT32 _IAUDIENCE_STDCALL GetAudienceList(AUDIENCE *outAudienceList,UINT32 maxLen)=0;
virtual UINT32 _IAUDIENCE_STDCALL GetValidMaxAudience(AUDIENCE &outAudience)=0;
virtual UINT32 _IAUDIENCE_STDCALL GetDisappearedAudienceList(AUDIENCE *outDisappearedAudienceList,UINT32 maxLen)=0; virtual _IAUDIENCE_STDCALL ~IAudienceManager(){}
};
_IAUDIENCE_EXTERN _IAUDIENCE_EXPORT IAudienceManager* _IAUDIENCE_STDCALL CreateAudienceManager(INT32 imW,INT32 imH);_IAUDIENCE_EXTERN _IAUDIENCE_EXPORT int _IAUDIENCE_STDCALL ReleaseAudienceManager(IAudienceManager** pAudManager);#endif
本人不熟悉C++,但是现在公司有个项目要用到C++的一个dll ,我上网查了一下说要用dllimport之类的
上面是C++的.h文件包含了所有的方法,请问我在C#中如何引用所有的方法。
急
* @file IAudienceManager.h
* @author Jenny
* @date May 7, 2012
*
* @brief Interface of Audience Manager.
*/#ifndef _AUDIENCE_MANAGER_H_
#define _AUDIENCE_MANAGER_H_#define _API_IAUDIENCE_EXPORT#define _IAUDIENCE_EXTERN extern "C"#if defined _API_IAUDIENCE_EXPORT
#define _IAUDIENCE_EXPORT __declspec(dllexport)
#define _IAUDIENCE_STDCALL __stdcall
#else
#define _IAUDIENCE_STDCALL
#define _IAUDIENCE_EXPORT
#endiftypedef int INT32;
typedef unsigned int UINT32;
typedef short SINT16;typedef struct AUDIENCE
{
INT32 X; INT32 Y;
INT32 W; INT32 H;
int gender; int age;
float watchingtime; struct
{
SINT16 year;
SINT16 mon;
SINT16 day;
SINT16 hour;
SINT16 min;
SINT16 sec;
} turnupTM;
//ID label of the audience;
UINT32 audID;
}AUDIENCE;
class IAudienceManager
{
public: virtual void _IAUDIENCE_STDCALL UpdateFrame(const char *bFrame)=0;
virtual UINT32 _IAUDIENCE_STDCALL GetAudienceList(AUDIENCE *outAudienceList,UINT32 maxLen)=0;
virtual UINT32 _IAUDIENCE_STDCALL GetValidMaxAudience(AUDIENCE &outAudience)=0;
virtual UINT32 _IAUDIENCE_STDCALL GetDisappearedAudienceList(AUDIENCE *outDisappearedAudienceList,UINT32 maxLen)=0; virtual _IAUDIENCE_STDCALL ~IAudienceManager(){}
};
_IAUDIENCE_EXTERN _IAUDIENCE_EXPORT IAudienceManager* _IAUDIENCE_STDCALL CreateAudienceManager(INT32 imW,INT32 imH);_IAUDIENCE_EXTERN _IAUDIENCE_EXPORT int _IAUDIENCE_STDCALL ReleaseAudienceManager(IAudienceManager** pAudManager);#endif
本人不熟悉C++,但是现在公司有个项目要用到C++的一个dll ,我上网查了一下说要用dllimport之类的
上面是C++的.h文件包含了所有的方法,请问我在C#中如何引用所有的方法。
急
解决方案 »
- c#中怎么对结构体整体赋零值?
- Timer的Tick事件
- 如何调用第三方控件的事件。
- WinForm的DataGridView下拉滚动条无法拉动!
- 查询多条记录 (不用控件数据绑定)显示出来
- HTTP/1.1 500 Internal Server error
- 集合类如何定义这样的接口?
- you must ruan Visual Studio under an Administraotr account in order to have access to the IIS metabase .
- asp.net&IIS配置的问题
- 进销存的数据存储问题
- 使用TeeChart.NET的有关问题
- 大家看一道题... ...
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);//方法声明
我查了一下调用结构体的话可以用类似下面的方法,那个IAudienceManager接口不行吗?
[StructLayout(LayoutKind.Explicit)]
public struct myStruct_t{
[FieldOffset(0)] //就是起始地址,所以位移为0
public int a;
[FieldOffset(4)] //相对于起始地址,位移一个int,32位机上是4个字节
public int b;
[FieldOffset(8)] //相对于起始地址,位移2个int,就是8个字节
public char c;
}
[DllImport("ExportFun.dll", EntryPoint = "mymath3")]
private static extern IntPtr mymath3();
IntPtr pT = mymath3();
myStruct_t mt = new myStruct_t();
mt = (myStruct_t)Marshal.PtrToStructure(pT, mt.GetType());
在C++中的是这样的
.hstruct MYSTRUCT_T
{
int a;
int b;
char c;
};_declspec(dllexport) MYSTRUCT_T* mymath3();.cppMYSTRUCT_T* mymath3()
{
MYSTRUCT_T* pT = new MYSTRUCT_T(); pT->a = 500;
pT->b = 600;
pT->c = 'A'; return pT;
}
//在Program.cs中贴入以下代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;//引入dll文件中的函数
class Program
{ //引入dll文件中的函数
[DllImport("dllDemo.dll")] private static extern int Sum(int a, int b); [DllImport("dllDemo.dll")] private static extern int Max(int a, int b); [DllImport("dllDemo.dll")] private static extern int Min(int a, int b);
static void Main(string[] args)
{ int a = Sum(3, 5);
Console.WriteLine(a);
Console.WriteLine(Max(5,10));
Console.WriteLine(Min(12,25));
Console.ReadKey();//直接main里边最后加个Console.Read()不就好了。要按键才退出。 }
}
//在Program.cs中贴入以下代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;//引入dll文件中的函数
class Program
{ //引入dll文件中的函数
[DllImport("dllDemo.dll")]
private static extern int Sum(int a, int b);
[DllImport("dllDemo.dll")]
private static extern int Max(int a, int b);
[DllImport("dllDemo.dll")]
private static extern int Min(int a, int b);
static void Main(string[] args)
{
int a = Sum(3, 5);
Console.WriteLine(a);
Console.WriteLine(Max(5, 10));
Console.WriteLine(Min(12, 25));
Console.ReadKey();//直接main里边最后加个Console.Read()不就好了。要按键才退出。 }
}
}
这里的sum,max 还有min,就是C++编写的 DLL中 对应你的这个项目的DLL中声明的函数IAUDIENCE_EXTERN _IAUDIENCE_EXPORT IAudienceManager* _IAUDIENCE_STDCALL CreateAudienceManager(INT32 imW,INT32 imH);_IAUDIENCE_EXTERN _IAUDIENCE_EXPORT int _IAUDIENCE_STDCALL ReleaseAudienceManager(IAudienceManager** pAudManager);