C+/CLI를 사용한 로컬 플러그인 쓰기

12850 단어 vvvv
이 기사는 vvvAdvent Calendar 2016의 14일째 기사입니다. 감기에 걸려서 마감일을 못 잡았어요.
이것은 콧물을 뽑으면서 투고한 것이다.
플러그인을 만드는 이유는 무엇입니까?
비록 vvv만 프로그래밍 언어로 뛰어나지만 잘하지 못하는 처리도 있다.예를 들어 모든 상자에 수치를 더한 상태가 바로 이것이다.Frame Delay를 사용해도 괜찮지만 패치의 전망이 좋지 않습니다.
이 문제를 해결하는 방법 중 하나는C#로 사용자 지정 노드를 작성하고 사용입니다. 이번에는 비스듬한 위쪽의 사용자 정의 노드 C++를 소개합니다!그렇습니다.
C++로 사용자 정의 노드를 쓸 수 있다면 C#와 같은 장점을 제외하고C/C++에서 제공하는 다양한 라이브러리 및 장치 APIvvv의 사용자 정의 노드로 자유롭게 사용할 수 있습니다!꿈이 부풀어오를 거야!
C++로 노드 만들기
그러면 C++는 사용자 정의 노드를 만드는 절차를 밟지만, 그 공정의 대부분이 Visual Studio의 사용법처럼 화면 캡처를 유튜브로 끌어올리기 때문이다.저기 보세요.
내용은 다음과 같습니다.
  • 프로젝트 만들기
  • 완제품 소스 코드를 가지고 dll가 가능한지 확인
  • 임의의 위치에서 dll
  • 을 만들 수 있음
  • 테스트용 v4p를 걸어서 Visual Studio에서 Build &Run
  • 을 할 수 있도록 합니다.
    이 공사의 설명

    이 영상에서 제작된 프로젝트는 여기서 →https://cl.ly/17421G3l0R3O
    비디오에 사용된 소스 코드 설명
    이번 예에서 사용한 것은 C#의 가치 노드의template를 생성한 코드를 C++로 직접 약칭하는 것이다.
    계속 C++라고 쓰여 있는데, 더 정확히 말하면 C++/CLI를 사용하는 마이크로소프트 C++의 확장 언어입니다.
    C+/CLI 는 쉽게 설명합니다.NET Framework의 C++를 사용해 C++/CLI 스타일로 쓰면 C#과 VIsual Basic 등이 있다.NET Framework를 사용하는 언어를 뛰어넘어 서로 호출할 수 있는 구조다.
    또한 vv의 C# 레이어에서 C++ 코드를 호출할 수도 있습니다.NET Framework 덕분에
    C++/CLI가 확장된 문법과 기능 부분도 C#와 많이 다르고 이해하기 쉬워 보인다.
    ↓ C# 원본 소스 코드
    #region usings
    using System;
    using System.ComponentModel.Composition;
    
    using VVVV.PluginInterfaces.V1;
    using VVVV.PluginInterfaces.V2;
    using VVVV.Utils.VColor;
    using VVVV.Utils.VMath;
    
    using VVVV.Core.Logging;
    #endregion usings
    
    namespace VVVV.Nodes
    {
        #region PluginInfo
        [PluginInfo(Name = "CSharpTest", Category = "CSharpTest", Tags = "")]
        #endregion PluginInfo
        public class CSharpTestNode : IPluginEvaluate
        {
            #region fields & pins
            [Input("Input", DefaultValue = 1.0)]
            public ISpread<double> FInput;
    
            [Output("Output")]
            public ISpread<double> FOutput;
    
            [Import()]
            public ILogger FLogger;
            #endregion fields & pins
    
            public void Evaluate(int SpreadMax)
            {
                FOutput.SliceCount = SpreadMax;
    
                for (int i = 0; i < SpreadMax; i++)
                    FOutput[i] = FInput[i] * 2;
    
                FLogger.Log(LogType.Debug, "hi tty!");
            }
        }
    }
    
    다른 한편, ↓는 C++/CLI로 재설정된 설치입니다.
    // TestNativePlugin.h
    
    #pragma once
    
    using namespace System;
    using namespace System::ComponentModel::Composition;
    
    using namespace VVVV::PluginInterfaces::V1;
    using namespace VVVV::PluginInterfaces::V2;
    using namespace VVVV::Utils::VColor;
    using namespace VVVV::Utils::VMath;
    
    using namespace VVVV::Core::Logging;
    
    using namespace System;
    
    namespace VVVV
    {
        namespace Nodes
        {
            [PluginInfo(Name = "CppCliTest", Category = "CppCliTest", Tags = "")]
            public ref class CppCliTestNode : public VVVV::PluginInterfaces::V2::IPluginEvaluate
            {
            public:
    
                [Input("Input", DefaultValue = 1.0)]
                ISpread<double>^ FInput;
    
                [Output("Output")]
                ISpread<double>^ FOutput;
    
                [Import()]
                ILogger^ FLogger;
    
                void Evaluate(int SpreadMax) override;
            };
        }
    }
    
    // TestNativePlugin.cpp
    
    #include "stdafx.h"
    
    #include "TestNativePlugin.h"
    
    void VVVV::Nodes::CppCliTestNode::Evaluate(int SpreadMax)
    {
        FOutput->SliceCount = SpreadMax;
    
        for (int i = 0; i < SpreadMax; i++)
            FOutput[i] = FInput[i] * 2;
    
        FLogger->Log(LogType::Debug, "hi tty!");
    }
    
    보는 느낌이 많이 다르지 않나요?
    기본적으로 이름 공간 선언과 C++상 익숙하지 않은 ISpread<double>^ 선언이 주로 다르죠.^.NET Framework 측면의 GC 관리 개체를 저장하기 위해 사용하는 포인터와 같은 참조물인 것 같습니다.
    이번에 우리는 문법과 세부 사항을 깊이 연구하지 않고, 더욱 상세한 내용은 이쪽을 보십시오...→https://ja.wikipedia.org/wiki/C%2B%2B/CLI
    총결산
    C# 기본값은 경영진으로 불리는 GC를 메모리 관리하도록 하는 모드로, 프로그래머 측이 명시적으로 밝히지 않으면 언로드(메모리의 수동 관리) 모드로 이동하지 않는다.
    C++를 계속 하는 사람들에게 메모리를 자동으로 제어하는 것은 매우 징그러운 곳이다. 각종 조사를 통해 C++로 플러그인을 쓸 수 있어서 정말 다행이다. 나는 이런 기분으로 가득 차 있다.
    그럼에도 불구하고 앞으로 C#를 계속 피할 것 같지는 않아요.NET Frameworks의 단순성도 버리기 힘들기 때문에 이를 계기로 열심히 공부해야 한다고 생각합니다!좋은 참고서가 있으면 알려주세요!!!
    이번에는 C++/CLI의 기초 소개인데 힘을 줘서 꿈이 확장되는 곳으로 가지 못했어요.
    여기 있다!

    좋은 웹페이지 즐겨찾기