zoukankan      html  css  js  c++  java
  • C++ 调用C#类库

    本地项目 CPlusAccessCSharp


    //.h
    #include <msclrmarshal_cppstd.h> using namespace System; using namespace msclr::interop; using namespace std; #include <string> #using "..\Debug\ClassLibrary1.dll" using namespace ClassLibrary1;
    // CCPlusTestProjectDlg 对话框
    class CCPlusTestProjectDlg : public CDialogEx
    {
        void (*pf)(int);
    // 构造
    public:
        CCPlusTestProjectDlg(CWnd* pParent = NULL);    // 标准构造函数
        //void OnReceiveData(int m);
    
        static void OnReceiveData(int m,ClassLibrary1::ConnectionErrorStat stat)
        {
            Console::WriteLine(L"Function1 called with value {0}{1}",m,stat.ToString());
        }
    
        static void OnReceiveData2(int code, System::String^ cmd, array<unsigned char>^ data)
        {
            char* szRet =  (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(cmd); 
            CString strCmd(szRet);
            int len = data->Length ;
            unsigned char *b2 = new unsigned char[data->Length + 1];
            pin_ptr<unsigned char> pb1 = &data[0];
            memcpy(b2,pb1,data->Length);
            b2[data->Length ] =0;
            CString strData(b2);
            delete  b2;
    
            Console::WriteLine(L"Function1 called with value {0}",code);
        }
    // 对话框数据
        enum { IDD = IDD_CPLUSTESTPROJECT_DIALOG };
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
        CString ClrStringToCString(String ^ msg);
    
    // 实现
    protected:
        HICON m_hIcon;
    
        // 生成的消息映射函数
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    public:
        afx_msg void OnBnClickedOk();
        afx_msg void OnBnClickedCancel2();
    };
    
    
    
    //.cpp
    void CCPlusTestProjectDlg::OnBnClickedOk()
    {
        ClassLibrary1::WebHttp ^ http = gcnew ClassLibrary1::WebHttp();     //申明Clr 类
        ClassLibrary1::WebHttp::OnReceiveCallBack^ hander=gcnew ClassLibrary1::WebHttp::OnReceiveCallBack(HandlerClass::Fun1);
        ClassLibrary1::WebHttp::OnReceiveCallBack^ hander1=gcnew ClassLibrary1::WebHttp::OnReceiveCallBack(OnReceiveData);
        ClassLibrary1::WebHttp::OnReceiveCallBack2^ hander2=gcnew ClassLibrary1::WebHttp::OnReceiveCallBack2(OnReceiveData2);
        String^ strMsg1;
        ClassLibrary1::ReturnMsg ^ ret2 = http->Test(hander,hander2,strMsg1);     //回调函数,C#委托
        
        array<int> ^ intArray = gcnew array<int>(2);   //定义数组长度与类型
        intArray[0] = 5;
        intArray[1] =6;
        array<float>^  floatArray = gcnew array<float>(4);
        floatArray[0] = 1.1;
        floatArray[2] = 2.2;
        floatArray[3] = 3.3;
        array<String^>^  FrameAry = gcnew array<String^>(4);
        FrameAry[0] = "abc";
        FrameAry[2] = "123";
        String^ strRet = http->SetInfo(1, intArray, floatArray, FrameAry);   //传数组参数
        char* szRet1 =  (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(strRet);  //String^ 转char *
        CString strRet2(szRet1);
    
        ClassLibrary1::ReturnMsg ^ ret = http->Test(hander1);               //返回类
        int code = ret->code;
        CString strMsg = ClrStringToCString(ret->msg);
    
        char* szRet =  (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(ret->msg); 
        CString strMsg2(szRet);
        code = code;
    }
    
    CString CCPlusTestProjectDlg::ClrStringToCString(String^clrString)
    {
        CString strRet = "";
        string sMsg;
        sMsg = marshal_as<std::string>(clrString);
        CA2T szr((sMsg).c_str());
        strRet = (LPCTSTR)szr;
    
        return strRet;
    }
  • 相关阅读:
    JEECG与帆软报表集成
    各种数据库的锁表和解锁操作
    sql server数据库查询超时报错
    java项目部署后的文件路径获取
    js解决跨站点脚本编制问题
    java递归算法实现拼装树形JSON数据
    FreeMarker中的list集合前后台代码
    去除list集合中重复项的几种方法
    Java中Properties类的操作
    mysql 容灾 灾备 备份
  • 原文地址:https://www.cnblogs.com/profession/p/12560243.html
Copyright © 2011-2022 走看看