Как создать экспортированные функции в Mono.Cecil? - PullRequest
0 голосов
/ 31 августа 2011

Что я делаю не так?Я пытаюсь создать экспортированную функцию LoadLibraryA и внедрить ее в сборку.

TypeReference stringType = asm.MainModule.Import(typeof(String)); 
TypeReference nativeIntType = asm.MainModule.Import(typeof(IntPtr));
ModuleReference kernel32Ref = new ModuleReference("kernel32");

asm.MainModule.ModuleReferences.Add(kernel32Ref);
MethodDefinition loadLibraryA = new MethodDefinition("LoadLibraryA", Mono.Cecil.MethodAttributes.Public |
            Mono.Cecil.MethodAttributes.HideBySig | Mono.Cecil.MethodAttributes.Static |
            Mono.Cecil.MethodAttributes.PInvokeImpl, nativeIntType);

        loadLibraryA.PInvokeInfo = new PInvokeInfo(PInvokeAttributes.NoMangle | PInvokeAttributes.CharSetAnsi
            | PInvokeAttributes.SupportsLastError | PInvokeAttributes.CallConvWinapi, "LoadLibraryA", kernel32Ref);

        loadLibraryA.Parameters.Add(new ParameterDefinition("name", Mono.Cecil.ParameterAttributes.None, stringType));

1 Ответ

0 голосов
/ 01 сентября 2011

Не волнуйтесь, я нашел решение.Предполагается, что точка входа будет LoadLibrary, а не LoadLibraryA.Интересно, почему я это сделал .....

Также я этого не делал:

loadLibraryA.IsPreserveSig = true;

Кодировка также должна быть Unicode, а не ANSI ...

...