zoukankan      html  css  js  c++  java
  • 导出C++DLL出现的莫名问题和问题求助 遥远的青苹果

     

    2,求各给看客指正或帮我调试一下我的程序

    先说结果,C#调用C++导出的组件出现如下异常。

    image

    而162行的错误,就是new位置的错误,

      image

    不知道是不是我导出的方式的问题,是下面几种(我也不确定是不是我导出方法不正确)。

    image

     

     

    回顾我做的主要步骤和问题求助

    创建要导出DLL 的C++程序

    我程序的过程导出声明过程步骤是,是先创建一个C++的DLL。

    具体是在BOOL APIENTRY DllMain文件函数所在的cPP文件中,添加一个实现了一个导出封装业务逻辑的函数。函数名是Porter,函数的实现如下

      image其中int  PowerFlowMain(char ** path )// 主要业务的逻辑。

    添加一个def定义文件。 文件内容如下

    LIBRARY    "TestPowerFlow"
    EXPORTS
    Porter @1

     

    创建调用DLL的C#程序。

    C#的调用过程如下,找到C++生成的dll ,然后添加到引用。

    定义如下委托函数,其中CppPorter是调用非托管代码的一个封转,这个城西中最重要的一部分是

    image

    这个委托封装与加载的定义如下!   1: 

        class CppPorter
        {
    
                    [DllImport("kernel32.dll")] 
                  private extern static IntPtr LoadLibrary(String path); 
                  [DllImport("kernel32.dll")] //读取动态库文件  
                  private extern static IntPtr GetProcAddress(IntPtr lib, String funcName); 
                  [DllImport("kernel32.dll")] 
                  private extern static bool FreeLibrary(IntPtr lib); 
                  private IntPtr hLib; 
    
    
              public CppPorter(String DLLPath) 
              { 
                    hLib = LoadLibrary(DLLPath); 
              }
    
              public CppPorter()
              {
                 
              }
    
    
                    ~CppPorter() 
                  { 
                          FreeLibrary(hLib); 
                  }
    
    
    
    
            
                //将要执行的函数转换为委托 
                public Delegate Invoke(String APIName, Type t)
                {
                    IntPtr api = GetProcAddress(hLib, APIName);
                    return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t);
                } 
    
    
    
    
    
            [DllImport("TestPowerFlow.dll", EntryPoint = "Porter", ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
            public static extern int Porter(ref string pp); //声明
    
    
    
    
    
    
            public void PowerFlowMainCSharp()
            {
                string path=@"d:\";
    
                Porter(ref path); //真实调用
    
    
            }
     

    最后是我要求助广大网友的问题。为什么我调用C++会出现异常image

    呢! 这个问题到底是处于哪个环节中的,在导出DLL时有什么细节会出现这种问题!或者是哪位大牛有时间!可以直接联系我 !406020549 直接远程,真诚恳切大家帮忙

  • 相关阅读:
    布隆过滤器(Bloom Filter)简要介绍
    利用skipList(跳表)来实现排序(待补充)
    rpc、socket、tcp/udp简要梳理
    微服务、rest/restful、springmvc、http简要梳理
    Kafka生产者producer简要总结
    相同数据源情况下,使用Kafka实时消费数据 vs 离线环境下全部落表后处理数据,结果存在差异
    kafka部分重要参数配置-broker端参数
    spring boot-- 三种启动方式
    spring boot --部署war到tomcat中
    阿里云服务上面部署redis + 本地Redis客户端连接方法
  • 原文地址:https://www.cnblogs.com/lixinhai/p/2622195.html
Copyright © 2011-2022 走看看