Я смог заставить его работать следующим образом:
Сначала я немного изменил ваш код, у меня возникли проблемы с пространством имен и компилятором, который думал, что точки - это каталоги.Итак, я закончил с этим.
(ns hello
(:require [clojure.core])
(:gen-class
:methods [#^{:static true} [output [int int] int]]))
(defn output [a b]
(+ a b))
(defn -output [a b]
(output a b))
(defn -main []
(println (str "(+ 5 10): " (output 5 10))))
Далее я скомпилировал его, вызвав:
Clojure.Compile.exe hello
Это создает несколько файлов: hello.clj.dll, hello.clj.pdb, hello.exe и hello.pdb Вы можете выполнить hello.exe, и он должен запустить функцию -main.
Далее я создал простое консольное приложение C #.Затем я добавил следующие ссылки: Clojure.dll, hello.clj.dll и hello.exe
Вот код консольного приложения:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
hello h = new hello();
System.Console.WriteLine(h.output(5, 9));
System.Console.ReadLine();
}
}
}
Как видите,у вас должна быть возможность создавать и использовать класс hello, он находится в сборке hello.exe.Я не то, почему функция «output» не является статичной, я предполагаю, что это ошибка в компиляторе CLR.Я также должен был использовать версию 1.2.0 ClojureCLR, так как последняя выбрасывала сборку не найденных исключений.
Чтобы выполнить приложение, убедитесь, что для переменной среды clojure.load.path установлено, где вашаПостоянные двоичные файлы находятся.
Надеюсь, это поможет.