-
Notifications
You must be signed in to change notification settings - Fork 586
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in 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: