p invoke-c#调用pjsip 的 c++ dll 没有参数正常,但是有参数的时候就报错

问题描述

c#调用pjsip 的 c++ dll 没有参数正常,但是有参数的时候就报错

pjsip 的 c++ dll ,按照文档里面的参数设置来传递参数,但是,在按照P/invoke 方式进行获取,但是运行的结果是,没有参数的都能正常运行,有参数的却报错,错误是这样的

对 PInvoke 函数“dllTest!dllTest.Program::dll_makeCall”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

代码如下
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace dllTest
{
class Program
{
///
/// 初始化
///
///
[DllImport("pjsipDll.dll", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int dll_init();
///
/// 主函数
///
///
[DllImport("pjsipDll.dll", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int dll_main();

    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    [DllImport("pjsipDll.dll", CharSet = CharSet.Ansi, SetLastError = true)]
    private static extern int dll_getNumOfCodecs();
    /// <summary>
    /// 打电话
    /// </summary>
    /// <param name="accountId">用户名</param>
    /// <param name="uri">地址</param>
    /// <returns></returns>
    [DllImport("pjsipDll.dll", EntryPoint = "dll_makeCall")]
    private static extern int dll_makeCall(int accountId, string uri);
    /// <summary>
    /// 回电话
    /// </summary>
    /// <param name="callId"></param>
    /// <param name="code"></param>
    /// <returns></returns>
    [DllImport("pjsipDll.dll", CharSet = CharSet.Ansi, SetLastError = true)]
    private static extern int dll_answerCall(int callId, int code);
    /// <summary>
    ///
    /// </summary>
    /// <param name="callId"></param>
    /// <returns></returns>
    [DllImport("pjsipDll.dll", EntryPoint = "dll_releaseCall", CharSet = CharSet.Ansi, SetLastError = true)]
    private static extern int dll_releaseCall(int callId);

    static void Main(string[] args)
    {
        try
        {
            dll_init();
            dll_main();
            string uri = "sip:bob@192.168.91.128:5060";
            int sessionID = dll_makeCall(0, uri);
            Console.WriteLine(sessionID > 0 ? "成功" : "失败" + "----->SessionID:" + sessionID);
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            return;
        }

    }
}

}

时间: 2025-01-20 21:13:43

p invoke-c#调用pjsip 的 c++ dll 没有参数正常,但是有参数的时候就报错的相关文章

c#调用c++-c#调用C++dll 返回值为结构体,其中包含string, 报错

问题描述 c#调用C++dll 返回值为结构体,其中包含string, 报错 c++ struct ClientInfo { char adress[4]; }; extern "C" __declspec(dllexport) ClientInfo Test() { ClientInfo c; strcpy_s(c.adress, "1234"); return c; } c# [DllImport("ManagerAPI.dll")] pub

调用函数-简单的com组件调用,用类厂的方式,调试到ix-&amp;amp;gt;ifun()内存报错。。

问题描述 简单的com组件调用,用类厂的方式,调试到ix->ifun()内存报错.. #include #include "ComExp1.h" #include "ComExp1_i.c" int main(int argc, char* argv[]) { IUnknown *pUnk=NULL; ICompute *pObject; //ICompute * pICompute; //定义一个ICompute 的接口指针: HRESULT hResult

web service-jboss5环境下,cxf和axis调用webservice客户端都是不报错,不返回结果

问题描述 jboss5环境下,cxf和axis调用webservice客户端都是不报错,不返回结果 有谁碰到过这种问题,cxf和axis调用webservice没问题,部署到jboss5里面就有问题, 不报错,不返回结果 解决方案 http://blog.csdn.net/shiqi472807092/article/details/8254494

如何在NodeJS中调用SS生成的DLL

要想在NodeJS中调用SS生成的DLL, 需要借助EdgeJS. EdgeJS: http://tjanczuk.github.io/edge/ 如果你还不知道如何在SS 中生成DLL, 请查看: Spider Studio 新版本 (x-mas) - 可以引入第三方程序集, 可以将脚本生成为DLL 下面以曾经写过的XML/JSON互转的脚本为例 (C#中 另辟蹊径解决JSON / XML互转的问题) 说明如何在NodeJS中应用SS DLL: 1. 安装edgejs npm install

请教一个急的问题:C#中如何调用C++编写的Dll?

问题描述 请教各位大哥大姐,C#中如何调用别人用C++编写好的DLL? 解决方案 解决方案二:和C#调用windowsapi一样,用extern声明函数原型,并且封送对应的类型,有指针的还要分配空间.自己googleC#平台互操作msdn解决方案三:使用dllimport搜P/Invoke可以看到大量的例子具体问题可以继续讨论解决方案四:引用1楼caozhy的回复: 和C#调用windowsapi一样,用extern声明函数原型,并且封送对应的类型,有指针的还要分配空间.自己googleC#平台

c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存

问题描述 c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存 delphi函数原型 Procedure invoke(params :PChar; result : PChar) ; 解决方案 把这个delphi的原型改一下,改为 Function Pchar invoke(params :PChar) ; 再试试 解决方案二: Function invoke(params: PAnsiChar): PAnsiChar ;

.Net(C#) 调用Delphi 编写的DLL

问题描述 我通过动态加载动态库的方式调用Delphi编写的DLL的一个方法,执行时没问题,但是在调试时会出错:尝试在非托管DLL中执行托管代码步骤如下:通过WindowsAPI加载Delphi编写的DLL取得方法的指针将取得的方法转换为一个方法原型相同的委托实例A.(原型为:delegatevoidFuncation())A.Invoke();调试时就是这一步出错:尝试在非托管DLL中执行托管代码谁可以告诉我这个是什么原因? 解决方案 解决方案二:[DllImport("Delphidllnam

java调用swt.jar包dll文件的加载问题?

问题描述 java调用swt.jar包dll文件的加载问题? 调用swt.jar时,报错 Exception in thread "AWT-EventQueue-2" java.lang.UnsatisfiedLinkError: no swt-win32-3347 or swt-win32 in swt.library.path, java.library.path or the jar file at org.eclipse.swt.internal.Library.loadLib

怎样在C#中调用Delphi6写的DLL

我在编写一个系统时遇到了一个问题,无法在C#中调用Delphi6写的DLL,只因为DLL的参数是string类型的.然后在网上找相关的资料,还是没有结果.经过我的再三琢磨,现在已经解决,特写此文章与大家分享我的喜愉!Dellphi DLL文件:///////////////////////////////////////////////////////////////////library mydll; uses SysUtils, Classes; {$R *.res}function Out