0
#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

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

=============================代码==================== ===========

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

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

4

1 回答 1

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);
于 2013-11-10T11:38:08.110 回答