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代码中具有虚拟方法调用的行为,还是返回工作?