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

dev C++ で DLL を作成しました。DLL の名前は「Info.dll」で、「GetInfo」という 1 つの関数が含まれています。ヘッダー ファイルは次のようになります。

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 に答える