c#调用c++dll函数时参数传递的问题?怎样正确传值?

问题描述

c#调用c++dll函数时参数传递的问题?怎样正确传值?

在c++项目cpptest.dll中定义:
struct A
{
int X;
int Y;
};

extern "C" __declspec(dllexport) int fun1(A *a);

int fun1(A *a)
{
return a->X;
}

在C#项目中定义:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
class A
{
public int X;
public int Y;
}

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate int dofun(ref A a1);   

class Program
{
    static void Main(string[] args)
    {
        //1. 动态加载C++ Dll
        int hModule = NativeMethod.LoadLibrary("cpptest.dll");
        if (hModule == 0) return;
        //2. 读取函数指针
        IntPtr intPtr = NativeMethod.GetProcAddress(hModule, "fun1");
        //3. 将函数指针封装成委托
        dofun dofun1 = (dofun)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(dofun));

        A a1 = new A();
        a1.X = 1;
        a1.Y = 2;
        Console.WriteLine(dofun1(ref a1));
    }
}

为什么每次运行输出都不相同,且数字不是1也不是2,而是类似7825552,14052168,21507032?该如何修改呢?

解决方案

class A换成struct A

时间: 2024-10-02 22:37:40

c#调用c++dll函数时参数传递的问题?怎样正确传值?的相关文章

第二个activity调用webservice的函数时无效

问题描述 各位大侠,第一个activity调用webservice的某一获取表中信息的函数时,是有效的,能读敢出信息并显示出来.当跳转到第二个activity时,再调用webservice某一函数时,好象没反映,是什么原因导致的??在第一个activity和第二个activity中都有初始化webservice的服务:MyWebService.MyServicemyServ=newMyWebService.MyService();myServ.Url="http://192.168.1.6:21

调用DLL函数时报告堆栈异常的解决方法

The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. 解决方法: 1. VC6   工程->设置->C/C++-&g

C# 调用C++Dll函数问题

问题描述 原函数typdedefstructtagParam{charPort[3];charCtrlID[3];charParams[1024];charIPPort[5];charIPAddr[15];}unsignedshortOpenComm(Params&lParam,intsType)如下为我转换后的[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]privatestructParam{

求助,调用company.dll 文件时出错了,多谢各位帮忙!

问题描述 ServerErrorin'/'Application.--------------------------------------------------------------------------------CompilationErrorDescription:Anerroroccurredduringthecompilationofaresourcerequiredtoservicethisrequest.Pleasereviewthefollowingspecificer

c# 3.0-C#调用C++ dll出现的问题

问题描述 C#调用C++ dll出现的问题 C#调用C++的dll库时,其中库中对应的函数中带有指针,用的unsafe,但是会出现错误 错误 CS0122: "WindowsFormsApplication1.THFeature.EF_Compare(ref byte, ref byte)"不可访问,因为它受保护级别限制 解决方案 THFeature.EF_Compare 这个方法要定义成public的. 解决方案二: 方法**EF_Compare **访问修饰符是什么?如果受保护级的

c#调用自定义matlab函数

问题描述 c#调用自定义matlab函数 我使用matlab编辑了一个计算卷积的函数. 输入的变量如下 function R = reliability( range,q1,q2,b1,b2,k1,k2,l1,l2 ) 计算之后,返回一个数组. 用matlab编译成.dll文件,在VS使用c#调用时遇到以下问题 首先,变量中出现了一个我没有定义过的int numArgsOut,不知道是哪里来的,而我定义的l2不存在了: 其次,我如何把这个object变量中的数组读取出来放到一个数组里面? 谢各位

.net-C#调用c++的dll执行带字符串参数的函数时遇到的问题

问题描述 C#调用c++的dll执行带字符串参数的函数时遇到的问题 我在c++项目中实现函数: extern "C" __declspec(dllexport) int FUNC1(const char* xmlSta, char* fileOut) { return 0; } 然后编译成动态库a.dll,并在C#项目中引用, 用静态加载的方式,是可以运行的,代码如下(只写调用的部分): [DllImport("a.dll", EntryPoint = "

C# 如何调用C++dll 类的成员函数?(请大家指教一二)

问题描述 C#如何调用C++写的MFCDLL中某一类的成员函数呢?eg...C++MFCDLL中有一个类的公共成员函数:CDllClass::icanseeu()...C#应用程序如何调用此函数....求助....先谢啦!!! 解决方案 解决方案二:实现不了解决方案三:C++自己调用都是问题,何况是其他语言解决方案四:实现不了.解决方案五:那怎么办,,,有没什么办法可以解决的...如果是一个C++的普通函数就可以调用的,(已实现)一个C++的类成员函数要怎么办?难不成把C++代码转换为C#代码?

c#-C#调用C DLL(char *传出参数)时,报错参数不匹配

问题描述 C#调用C DLL(char *传出参数)时,报错参数不匹配 public class LLht { //手持机下载上传 [DllImport(""llht.dll"" CallingConvention = CallingConvention.StdCall CharSet = CharSet.Ansi SetLastError = true ExactSpelling = true)] public static extern int llht_dow