#ifndef HEADER_INFOAPI
#define HEADER_INFOAPI
#define EXTERN_C extern "C"
#define INFOAPI __declspec(dllexport)
#include <windows.h>
#include <TCHAR.h>
struct Info
{
virtual void StartPs() = 0;
virtual double GetHt() = 0;
virtual bool IsShowInfo() = 0;
};
typedef Info* INFOHANDLE;
EXTERN_C INFOAPI INFOHANDLE WINAPI GetInfo(wchar_t* File1,
wchar_t* File2,
double Height,
int Num);
#endif
我在开发C ++中编写了一个DLL。 DLL的名称是“Info.dll”,它包含一个函数:“GetInfo”。头文件如下所示:
如何在C#中调用它?
嗨,c45207
我尝试了你所说的并且得到了一个错误的bodyRes.GetHt()
值在我的期望中bodyRes.GetHt()应为= Double test = 170.0,
但我得到了9.2079039212996476E-275
请你帮我看一下我做错了什么吗?
============================= code ================= ==============
Double test = 170.0;
IntPtr x = GetInfo("C:\\t.jpg", "C:\\e.jpg", test, 0);
IBodyInfo bodyRes = (Info)Marshal.PtrToStructure(x, typeof(Info));
bodyRes.StartPs();
=============================================== =====================
=============================结果================= ============
bodyRes.GetHt() 9.2079039212996476E-275 double
bodyRes.IsShowInfo() false bool
=============================================== =====================
答案 0 :(得分:0)
您使用DllImport标记了问题,因此我假设您要使用该/ PInvoke。这样的事情对你有用吗?如果没有,请澄清问题。
using System.Runtime.InteropServices;
[DllImport("Info.dll", CharSet=CharSet.Unicode)]
public static extern IntPtr GetInfo(string File1, string File2, double Height, int Num);