C# 通过函数指针调用C++ DLL
C# call C++ DLL through function pointer
#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);
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 函数何时会在c++中包含stack_Unwind_Resume调用