|  | 
 
| 本帖最后由 chencs 于 2019-11-17 07:23 编辑 
 由于近日捯饬 Creo 与 Teamcenter 集成的事宜,自己对 Java 不熟,无法用 Java 对 TC 进行开发,用C++开发TC又存在开发效率问题,遂研究如何用 Creo Toolkit C/C++ 二次开发接口调用 Teamcenter 的 C# 接口进行开发。
 
 然鹅,理想很丰满,现实很骨感。Creo Toolkit C/C++ 开发时并不支持 clr!,使用 COM 接口又得注册,非常繁琐。遂一次又一次的测试,研究。
 
 苦心人,天不负啊!(还是谷歌大法好)
 
 终于让我在谷歌上搜索到了微软的 CLRCreateInstance API 。
 
 经过几番折腾,捯饬出了以下部分 C/C++ 代码,与诸君共享,以免诸君再多走弯路:
 
 复制代码HRESULT hr;
    ICLRMetaHost *pMetaHost = NULL;
    ICLRRuntimeInfo *pRuntimeInfo = NULL;
    ICLRRuntimeHost *pClrRuntimeHost = NULL;
    // build runtime
    hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_PPV_ARGS(&pMetaHost));
    hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
    hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, 
        IID_PPV_ARGS(&pClrRuntimeHost));
    // start runtime
    hr = pClrRuntimeHost->Start();
    // execute managed assembly
    DWORD pReturnValue;
    hr = pClrRuntimeHost->ExecuteInDefaultAppDomain(
        L"E:\\FrameworkInjection\\_build\\debug\\anycpu\\InjectExample.dll", 
        L"InjectExample.Program", 
        L"EntryPoint", 
        L"hello .net runtime", 
        &pReturnValue);
    // free resources
    pMetaHost->Release();
    pRuntimeInfo->Release();
    pClrRuntimeHost->Release();
 有需要的小伙伴,拿去,不谢~
 
 以上代码是基于 Creo 4.0 Creo Toolkit C 接口开发的dll调试通过~
 
 大家谁便看,不需要回帖可见~
 
 基于以上方法,就可以实现 toolkit dll -> C# dll -> toolkit dll api (加载后的另一个toolkit dll export 的 api,已试验通过)
 
 | 
评分
查看全部评分
 |