3

現時点では、Ruby で win32api しか使用できないため、ffi などは使用できません。Ruby では、DLL をロードして文字列を渡すと、同じ文字列が返されることを期待しています。コードは次のとおりです。

ルビーコード

string = "hello"
p = Win32API.new('C:/func/testFunc', 'Print', ['P'], 'S')
p.call(string)

出力

=> 7476721

DLL

extern (C)export char* Print(char* am)
{  
   return am;
}

「こんにちは」の代わりに数字を取得しています。dllに渡したばかりの値のアドレスだと思います。DLL から文字列を取得する適切な方法を教えてください。

4

1 に答える 1

0

これは私のルビーの得意分野ではありませんが、この質問は興味深いものでしたWin32APIは、(一般的に)ポインタをデータ型として受け取り、返します。つまり、変数ポインターを渡す必要があり、DLLがポインターを編集します。必要に応じてこれらをパックおよびアンパックするのはあなた次第です(Win32APIの仕様が恐ろしいという事実に助けられません)。ここにいくつかの良い例があります:

http://www.rubytips.org/2008/05/13/accessing-windows-api-from-ruby-using-win32api-library/

「S」の返品(エクスポート)タイプはないと思います。有効なオプションはn、l、i、pのみです。こちらのドキュメントを参照してください:http ://www.ruby-doc.org/docs/ProgrammingRuby/html/lib_windows.html

于 2013-01-22T16:32:19.447 に答える