

こんにちは、お世話になります。

C#のDllImportで明示的にカレントディレクトリのDLLをインポートさせたいんですが、下記のソースだとコンパイルエラーになってしまうようです。

[code]

    using System;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    public class main{
    string curdir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    [DllImport(curdir+"\\test.dll", CharSet = CharSet.Ansi)]
    extern static int test(int num);
    （後略）
    
[/code]

コンパイルエラーは、下記です。  
test.cs(7,16): error CS0120: 静的でないフィールド、メソッド、またはプロパティ 'main.curdir'
で、オブジェクト参照が必要です

なにか明示的にカレントディレクトリのDLLを読み込むようにする方法はありますでしょうか。

よろしくお願いいたします。


CC BY-SA 4.0
2018-07-21T10:04:27.557
46808
2019-01-10T13:02:05.393
29034
question
c#
C#のDllImportに関して


以下の記事に出ています。  
[DllImportで実行時にdllを指定するには？](https://qiita.com/Temarin/items/8ddcf6bc8e793f834427)

> 結論  
>
> DllImportでdllを読み込む前にLoadLibrary関数でDLLを読み込んでおくことで同名のdllは、今後、読み込み済みのDLLを参照するようになる。

上記対処を行えば、以下のパス指定は無くしてファイル名だけで良くなるのでは？

[code]

    [DllImport(curdir+"\\test.dll", CharSet = CharSet.Ansi)]
    
[/code]

* * *

# 追記

検索し直したら、こんな記事が見つかりました。  
こちらの方がソースコードがすっきりするでしょう。  
[DLLの読み込み。DLLを探す検索パスの順序を変更する。...](http://d.hatena.ne.jp/tekk/20090824/1251122412)

アプリケーション構成ファイル（application名.exe.config）またはDLL/COMリダイレクションファイル（application名.exe.local）で指定するようです。

関連するMicrosoftの記事はこれです。  
[ Element<プローブ>要素](https://docs.microsoft.com/ja-
jp/dotnet/framework/configure-apps/file-schema/runtime/probing-element)  
[DLL/COM リダイレクション](https://msdn.microsoft.com/ja-
jp/library/ms811700.aspx#sidebyside_topic8)


CC BY-SA 4.0
2018-07-21T10:36:12.187
46810
2018-07-22T00:54:43.557
2018-07-22T00:54:43.557
26370
26370
46808
answer