次の例のように[DllExport] アトリビュートが付いたメソッドから、別の[DllExport] アトリビュート属性が付いたメソッドを呼び出すと実行時にエラーとなります。 原則的に[DllExport] アトリビュート属性が付いたメソッドは C#から呼び出さないようにしてください。
using System; using System.Runtime.InteropServices; namespace ClassLibrary36 { public class Class1 { [DllExport] public static IntPtr abc(IntPtr a, IntPtr b) { int c = (int)a + (int)b; return (IntPtr)(10 + c); } [DllExport] public static IntPtr ddd(IntPtr a, IntPtr b) { // DllExportの関数を呼んでると実行時にエラーとなる。 IntPtr d = abc(a, b); return (IntPtr)(10 + (int)d); } } }
実行すると不正終了するはずです。
#DLL = loaddll( currentmacrodirectory + @"\ClassLibrary36.dll"); #ret = dllfuncw( #DLL, "ddd", 1, 2); message(str(#ret));