Я хотел бы создать библиотеку из go-кода и использовать ее в проекте winforms C #.
Для ошибки прокрутите вниз.
Настройка
- GO 1.10.2
- tdm-gcc-5.1.0-3
- Windows 10 / x64
- Go-проект под названием
exprt
То, что я пробовал
Я создал минимальный инструмент go, который создает файл в рабочем каталоге:
package main
import (
"os"
"C"
)
func main() {
// nothing here
}
//export Test
func Test() {
os.OpenFile("created_file.txt", os.O_RDONLY|os.O_CREATE, 0666);
}
Следующие шаги были сделаны из Создание библиотеки DLL с помощью Go 1.7 .
Затем я скомпилировал в c-archive
сследующая команда: go build -buildmode=c-archive
, которая дает мне exprt.a
и exprt.h
.
После этого я создал файл с именем goDLL.c
(1: 1, как в ссылке выше) и вставил этот код:
#include <stdio.h>
#include "exprt.h"
// force gcc to link in go runtime (may be a better solution than this)
void dummy() {
Test();
}
int main() {
}
Наконец, я запустил эту команду для создания моей последней DLL:
gcc -shared -pthread -o goDLL.dll goDLL.c exprt.a -lWinMM -lntdll -lWS2_32
, которая дала мне "goDLL.dll".
Моя проблема
В C # я создал winforms-проект с 1 кнопкой, которая вызывает эту объявленную функцию (скопировал dll в папку отладки):
[DllImport("goDLL.dll")]
private static extern void Test();
Ошибка
System.BadImageFormatException: "An attempt was made to load a program with an incorrect format. (HRESULT: 0x8007000B)"
Извините за большой блок текста, но этобыл самый минимальный тест, который я мог придумать.
Я ценю любую помощь здесь.