[乱雑]Electronはnode-ffiを介してC++dllを呼び出す

9414 ワード

Electronはnode-ffiを介してC++dllを呼び出す
ffiインストールと呼び出し
node-gypのインストール
  • 設置前提条件
  • python(v 2.7,3.xはサポートされていません).
  • visual C++Build Tools、または(vs 2015以上(15含む))
  • .net framework 4.5.1

  • クリーンな環境であれば、次のコマンドで
  • をワンタッチでインストールできます.
    npm install --global --production windows-build-tools
  • インストールコマンド
  • npm install -g node-gyp

    問題にぶつかる
  • pythonが見つからないか、環境が間違っています.
  • コマンドラインpythonが使用可能かどうかを確認し、使用できない場合はpathを設定する.コマンドラインが使用可能であることを確認します.マルチバージョンの設定は、オンライン関連チュートリアルを参照して
  • を設定できます.
  • コマンドラインが使用可能です.次のコマンドで
  • を設定できます.
    npm config set python D:\Library\Python\Python27\python.exe
    

    次の
    node-gyp configure --python v2.7.3 --verbose
  • node-gyp rebuildエラー
  • node-gyp
  • を再インストール
  • は、次のコマンド
  • を順次実行する.
    npm uninstall node-gyp -g
    npm i -g windows-build-tools#         
    npm install -g node-gyp
    npm iconfig set python python
    npm i microtime --save-dev
  • ヒントシステムSDKが見つかりません
  • 対応するSDKをインストールするか、現在のシステムにインストールされているSDKを強制的に設定します.

  • node-gyp構成エラー
  • プロキシポート
  • を設定する.
    --proxy=http://myproxyurl/
      
    npm config set registry http://registry.npmjs.org/
  • ヒントhttpsタイムアウトまたは異常
  • httpリクエスト
  • への変更
    npm config set registry http://registry.npmjs.org/
    npm config get registry #      http,        ,    
  • msBuild.Exceエラー
  • vsバージョン
  • の設定
    npm install --msvs_version=2013
    npm install --msvs_version=auto #           
  • もnodeかもしれませんが、npmバージョンは一致しません.バージョン
  • を更新することができます.
    npm install npm -g
  • ここでは、packageを見つけるためにバージョンを強制的に更新する方法について説明します.jsonは対応するモジュールに打ってバージョン番号を変更し、
  • を実行する.
    npm install
  • すべての設定が間違っている場合は、次のコマンド
  • を試してみてください.
    node-gyp configure --verbose

    インストールffiはnode-ffiとも呼ばれます
  • 前提条件node-gyp
  • をインストールする
  • 実行コマンドインストール
  • npm install ffi
  • コマンドのインストールが成功しない場合はwindowsがgccをインストールしていない可能性があります.インストール
  • をダウンロードすることができます.
  • もしまだ成功しないならばソースコードをおりて自分でインストールをコンパイルすることができます
  • ソースアドレス
  • gitで次のコマンド
  • を実行できる場合
    git clone git://github.com/node-ffi/node-ffi.git
     cd node-ffi
     node-gyp rebuild
  • 上記の成功でこのモジュールをnode_にコピーできます.moudubleは直接使用できます.でもElectronはまだダメだElectronでコンパイルしなきゃ
  • ソースコードが通じない場合は、具体的な問題だけが具体的に分析されます.権限がないかどうか、重要なフォルダが作成されていないかどうかを見てみましょう.このときetc
  • を手動で作成することができる.

    Electronは手動でコンパイルしたffiを参照
  • 関連知識点紹介、手動で第3のモード
  • にコンパイル
  • その後、次のコマンドを実行できます.モジュールの現在のディレクトリの下で実行しなければなりません.そうしないと、bindingsファイル
  • が見つかりません.
    node-gyp rebuild --target=1.7.9 --arch=x64 --target_arch=x64 --dist-url=https://atom.io/download/electron
  • パラメータはtargetがelectronバージョンarchに対応する32か64かの後ろのウェブサイトがelectronに対応するヘッダファイルをダウンロードすることを説明して、もしアドレスが多く試すことができなければ、多く試すことができて、もしやはりだめならば宝を洗う
  • を考慮することができます
    https://npm.taobao.org/mirrors/atom-shell

    発生する可能性のある問題
  • %1 is not a valid Win32 application
  • npm rm node-sass
    npm install node-sass
  • electron再コンパイルは、以下のモジュールを少なくすることはできません.グローバルにインストールすることも、現在のプロジェクト
  • のみをインストールすることもできます.
    npm install nan
    npm install ref
    npm install ref-array
  • program.exeのエラーはnodeかもしれません.jsインストールが正しくない、または構成が正しくない
  • vscode拡張意外死亡
  • Git拡張の問題かもしれませんが、
  • を削除してください.
  • gitが削除してもだめならnodeかもしれません.js環境の構成が間違っています.ここで発生した問題はnodeをスケジューリングします.jsはこの問題を起こすがnode.js拡張は統合されています.だから使わないわけにはいかないのでnodeをリセットします.jsはきれいに削除して、必ずきれいにしてください.


  • ダイナミックライブラリの呼び出し
  • はffiモジュールを参照し、対応するタイプを宣言し、char*はString
  • に直接伝えることができる.
    var ffi = require('node-ffi')
    var ref = require('ref');
    var ArrayType = require('ref-array')
    var intPtr = ref.refType('int');
    var floatPtr=ref.refType('float');
    var float=ref.types.float;
    var floatArray = ArrayType(float);
  • 参照およびポインタタイプの単一変数は、次のようにすることができる
  • .
    var outNumber = ref.alloc('float');
    var actualNumber = outNumber.deref();
  • はjsメソッドのようにexportによって
  • を呼び出すことができる.
    exports.User32 = ffi.Library('user32', {
      'GetWindowLongPtrW': ['int', ['int', 'int']],
      'SetWindowLongPtrW': ['int', ['int', 'int', 'long']],
      'GetSystemMenu': ['int', ['int', 'bool']],
      'DestroyWindow': ['bool', ['int']]
    });
  • 配列の相関用法は、このアドレス
  • を参照することができる.
  • 他の値タイプおよび他の参照タイプは、このref
  • を参照することができる.
    よくあるエラー
  • リンクエラーのようなエラーは、一般的にdllが見つからないか、dllが他のdllに依存しているか、エラー符号化
  • を参照することができる.
  • 参照エラーは、モジュール内でrefを折り返しモジュールで参照することができ、electronによってダウンロードアドレスをコンパイルする必要がある可能性があります.http://download.csdn.net/download/liyangyang08/10163491

  • 未知の試みに直面することは私たちにできる唯一のことです.