Я получаю исключение требуется ссылка на объект для нестатических полей, метода или ...Невозможно вызвать Clojure CLr статический метод из приложения C#
вот что я пытаюсь сделать:
;; Here's the program.clj file from a VsClojure project.
;; First thing you need to do is add the :methods property
;; which takes a of methods that are to be generated when
;; the class is created. Here, I'm generating a static method
;; named hi which has no parameters and returns a String.
;;
;; When program.hi() is called from the C# code the
;; the clojure function -hi will be called. By default any
;; method in the :methods vector will be mapped to a function
;; with the same name prefixed by a -.
(ns program
(:gen-class
:methods [ #^{:static true} [hi [] String]]))
(defn -hi []
"Hi from ClojureCLR!")
(defn -main [& args]
(println "Hello world")
(println (-hi)))
;; The C# code is nothing special
;; You MUST add both the program.exe and program.clj.dll
;; files as references in hte C# project. In addition
;; to these assemblies you'll need to add the following
;; assemblies which can be found in the ClojureCLR's directory:
;; clj.gen_class.clj.dll, clojure.clr.io.clj.dll, clojure.core.clj.dll
;; clojure.core_deftype.clj.dll, clojure.core_printl.clj.dll,
;; clojure.core_proxy.clj.dll, clojure.genclass.clj.dll, clojure.gvec.clj.dll
;; using System;
;; namespace csharp
;; {
;; class Program
;; {
;; static void Main(string[] args)
;; {
;; // You can see here you'd never know this was
;; // really a clojure function I'm calling
;; Console.WriteLine("p.hi => {0}", program.hi());
;; }
;; }
;;}
Но получил: Ошибка 1 ссылка на объект необходим для не-статического поля, метода или свойства 'program.hi()' ConsoleApplication1.
То же я здесь: https://github.com/nCdy/clojure-clr-intro/blob/master/3-calling-clojure-from-c-sharp/csharp/clj_in_csharp/Program.cs
Я использую встроенных Визуальное расширение студии vsClojure. 1.1.0; Последняя версия версии 1.1.0 после файла Readme GitHub. Возможно, мне нужно обновить его, но у меня есть некоторые локальные проблемы, которые не позволяют мне построить последний clojre-clr (я их разрешу в следующем году).
Итак, вопрос в том, как я могу назвать библиотеку clojure clr с C#, и где моя проблема?
журнала:
'program.exe' (Managed (v2.0.50727)): Loaded 'C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'program.exe' (Managed (v2.0.50727)): Loaded 'D:\nCdy\P\Clojure1\Clojure1\bin\Debug\program.exe', Symbols loaded.
'program.exe' (Managed (v2.0.50727)): Loaded 'D:\nCdy\P\Clojure1\Clojure1\bin\Debug\Clojure.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'program.exe' (Managed (v2.0.50727)): Loaded 'C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'program.exe' (Managed (v2.0.50727)): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'program.exe' (Managed (v2.0.50727)): Loaded 'D:\nCdy\P\Clojure1\Clojure1\bin\Debug\Microsoft.Scripting.ExtensionAttribute.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'program.exe' (Managed (v2.0.50727)): Loaded 'C:\Windows\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_ru_b77a5c561934e089\mscorlib.resources.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
У меня есть ссылки на обоих. Насколько я помню, это был крах приложения при запуске program.exe по первому примеру и уверенному appcrash на one.exe. Clojure.compile.exe output: D: \ nCdy \ clojure-clr-intro \ 3-call-clojure-from-c-sharp \ clj \ one> Clojure.Compile.exe one Компиляция. - 797 миллисекунд. Но не могу запустить one.exe (потому что appcrash) и абсолютно то же самое «требуется для нестатического поля» при попытке запустить с C#. Я постараюсь узнать больше информации. – Cynede
Можете ли вы показать мне ошибки, которые вы получаете при запуске? Можете ли вы запустить clojure.main.exe без ошибок? – Rob
Я могу запустить его из visual studio, но когда я запускаю program.exe напрямую, я получаю appcrash на kernelbase.dll: Исправление System.TypeInitializationException было необработанным. Сообщение: Инициализатор типа «программа» выбрасывает исключение. Я также добавил журнал загрузки к вопросу. – Cynede