2017-01-18 11 views
3

数年前、私は水文学モデルを実行するためのいくつかの関数を持つdllを書きました。私はdllの中の関数の名前と引数を忘れてしまい、残念なことに良いドキュメンテーションファイルを書くのを忘れてしまった。関数は複雑なので、私はコードを書き直す必要があったので、私はそれを使うことができました。dyn.loadを使用してRにロードされたDLL内の関数のリストを取得する方法

私はRにDLLをロードしましたが、私が言ったように、関数の名前も構文も思い出すことはありません。

どのように機能をリストすることができますか、提供するはずの機能と引数の構文を確認するにはどうすればよいですか?私は引数が共通のモデル入力であったことを知っていますが、正直なところ私はフォーマットを覚えていません。

さらにdllをロードしてもエラーは発生しませんが、ロードされているかどうかを確認するとがFALSEになります。これをどうすれば解決できますか?

> x<-dyn.load("hbv_R64.dll") 
> is.loaded("hbv_R64") 
[1] FALSE 

答えて

-1

最高の解決策:逆アセンブリを使用してください。

ツール(たとえばhttp://www.nirsoft.net/utils/dll_export_viewer.html)を使用して機能を読むのは簡単ですが、パラメータを見つけるのは難しいです。

+0

これは、関数名を取得するために働いたが、私はまだパラメータで苦労しています。 – jjunju

2

is.loaded("hbv_R64")は、hbv_R64.dllにhbv_R64というシンボル(関数)がある場合にのみ、TRUEを返します。

getDLLRegisteredRoutinesを使用すると、登録された名前のリスト(ソースコード内の名前でなくてもよい)とインターフェイスを取得できます。あなたのケースでは

R> dlls <- getLoadedDLLs() 
R> getDLLRegisteredRoutines(dlls$base) 
        .Call .Call.numParameters .Fortran .Fortran.numParameters 
1  R_addTaskCallback     4 dqrcf      8 
2 R_getTaskCallbackNames     0 dqrdc2      9 
3 R_removeTaskCallback     1 dqrqty      7 
4            dqrqy      7 
5            dqrrsd      7 
6            dqrxb      7 
7            dtrco      6 

x <- dyn.load("hbv_R64.dll") 
getDLLRegisteredRoutines(x) 

?getDLLRegisteredRoutinesは言う、 "将来的には、我々はまた、パラメータの種類についての情報を提供します。"その情報はすでにアクセス可能なので、どうすればよいか分かりません。

関連する問題