C#呼叫C++;通过函数指针的DLL

C#呼叫C++;通过函数指针的DLL,c#,c++,.net,dll,dllimport,C#,C++,.net,Dll,Dllimport,==================================================================== #ifndef HEADER_INFOAPI #define HEADER_INFOAPI #define EXTERN_C extern "C" #define INFOAPI __declspec(dllexport) #include <windows.h> #include <TCHAR.h> struct Info {

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

#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
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();
===========================================结果=============================

#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
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();

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

你用DllImport标记了问题,所以我假设你想使用/PInvoke。像这样的东西对你有用吗?如果没有,请澄清问题

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

如何获取结构返回值?GetInfo返回指针,而不是结构。如果你还有一个C++函数返回一个Struts,那么你应该看看它应该如何启动。有关struct layout的更多答案,看起来可能会有所帮助。我已经编辑了我的问题,请帮助我检查错误。谢谢。您必须在.NET代码中具有虚拟方法调用的行为,还是返回工作?