当前位置:编程学习 > C#/ASP.NET >>

c#.net调用vc++编写的dll报错,在线等~求高手帮忙~

dll原函数是:extern "C" _declspec(dllexport) int Produce_RSA_Key(unsigned int p,unsigned int q, unsigned int* Ke, unsigned int* Kd, unsigned int* model);

下面是c#.net里调用的代码: 

[DllImport("key_produce.dll")]
       public static extern int Produce_RSA_Key(uint p, uint q,ref uint Ke,ref uint Kd,ref uint model);

 static void Main(string[] args)
        {
            uint p = 89;
            uint q = 97;
            uint Ke=1,Kd=1,model=1;
            Console.WriteLine(p);
            Console.WriteLine(q);

            if (Produce_RSA_Key(p,q,ref Ke,ref Kd,ref model)==1)
            {
                Console.WriteLine(Ke);
                Console.WriteLine(Kd);
                Console.WriteLine(model);
            }
            Console.ReadKey();//要按键才退出。
        }


求高人帮忙改下。运行的时候报错报的是:对 PInvoke 函数“ConsoleApplication2!ConsoleApplication2.Program::Produce_RSA_Key”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
--------------------编程问答-------------------- 你的问题在于,c++中实现的是什么功能,int*是代表的一个整数地址,还是一个数组地址,c#中要匹配着来才行 --------------------编程问答-------------------- 代表的是一个整数,匹配的话应该怎么整? unsigned int *到c#不是ref uint吗? --------------------编程问答-------------------- 未必,上周不是有个帖子吗,int*可能代表数组哦,这样还可能涉及到对齐封送问题 --------------------编程问答-------------------- 我是个新手呀,还不太懂这些,至于你所说的对齐封送我也没学过。。。。dll里这个函数参数unsigned int * Ke 只是通过p和q的一些数学运算得出的一个数。依你的意思,我应该怎么改呢?是dll里面int *的问题还是c#这边代码的问题?   --------------------编程问答-------------------- 你既然有C++的类库,一定有调用的实例(demo),如果没有找开发dll的人要个示例。
把这个实例贴出来,才能知道是不是数组。
一般加密的都是数组。 --------------------编程问答-------------------- 我自己在vc6.0上生成的dll,确实不是数组呀。出现这种问题会不会跟dll本身有关系?我在vc6.0上运行的没错啊。第一次用c#.net调用,求告诉是什么原因导致这种错误呀?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,