-
Notifications
You must be signed in to change notification settings - Fork 583
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
How to export managed method? #172
Comments
Did you read the documentation? :) You have to change the calling convention to cdecl or similar. There's also a missing piece of info in the documentation, you have to clear the COR20 header flag "IL Only". I have only tested this code by calling from unmanaged code (eg. C++), not calling it from managed code. I tried a quick hack and updated the MethodExportInfo.Options to None (it defaults to FromUnmanaged) but it also didn't work. Is it supposed to work? ... change call conv here...
// clear IL only flag
var options = new ModuleWriterOptions(module);
options.Cor20HeaderOptions.Flags &= ~ComImageFlags.ILOnly; |
Also you should update the call conv in the DllImport to match the call conv you changed the method to. |
And don't forget to make sure your test EXE targets x86 or x64 (should be the same as cl.dll) |
Yes, I have read the documentation. but it still have error after changing calling convention, so I delete it. |
There's a "jitDumper3.Core.dll" in JitDumper3, it's a C# dll, and export a managed method "Injection" by ilasm, and I can use DllImport to call it from C#. |
This fatal execution engine exception is thrown when debugging with VS. I don't get the exception when I use dnSpy or when I run it from the command line. |
It seems if cl.dll is debug, vs will throw an exception, but if cl.dll is release, vs is ok. |
cl.dll (x86)
If remove "method.ExportInfo = new MethodExportInfo();", handle is not 0.
The text was updated successfully, but these errors were encountered: