• 导出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 直接远程,真诚恳切大家帮忙

  • 相关阅读:
    在win8.1 64位环境下有关Oracle的安装和卸载
    动手又动脑
    二柱子四则运算(课堂练习)
    Java学生成绩绩点管理系统
    小学期第八周收获
    小学期第七周收获
    小学期第六周收获
    小学期第五周收获
    《大道至简》读后感
    小学期第四周收获
  • 原文地址:https://www.cnblogs.com/lixinhai/p/2622195.html
Copyright © 2020-2023  润新知