C# 通过函数指针调用C++ DLL

C# call C++ DLL through function pointer

本文关键字:调用 C++ DLL 指针 函数      更新时间:2023-10-16
#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() 应该是 = 双重测试 = 170.0,

但我得到了 9.2079039212996476E-275

你能帮我看看我做错了什么吗?

=============================

代码 ===

===================================
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

====

======================================================================

你用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);