Ich bin ein Anfänger in R und ich versuche, eine .dll
Datei mit dem Namen dll.dll
, die in C geschrieben ist, in R zu laden. Es scheint zu arbeiten, jetzt möchte ich Verwenden Sie die Funktionen, die in der Datei .dll
gespeichert sind, und ich Probleme auftreten..C() gibt mir eine leere Liste
Ich habe nach einer Lösung oder einer anderen Methode in Handbüchern gesucht, hier und auf Google. Wäre sehr dankbar, wenn ich einen Vorschlag bekommen könnte, was zu verwenden ist oder irgendeine Idee!
Mein Code:
setwd("C:/Users/MyUser/R")
dyn.load("dll.dll")
is.loaded("DLL_FUNK")
# For some reason True with capital letters, not in lower case
output <- .C("DLL_FUNK", in9 = as.integer(7))
#output # R Crashes before I can write this.
# R Crashes
# In outdata.txt: "in-value= 139375128"
Die Funktion eine Zahl zurückgeben sollte, 1955. Aber ich kann nicht auf diesen Wert zu kommen scheinen. Was mache ich falsch?
Aktualisierung mit Code (Fortran als C runned), das ist der Code in Dll.dll:
subroutine dll_funk(in9)
implicit none
!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
!*** Declarations: variables, functions
!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
integer(4) :: in9
!integer :: in9
! Definitions of variables in the external function calls
!!dec$ attributes c,alias :'dll_funk' :: dll_funk
!dec$ attributes dllexport :: dll_funk
!dec$ attributes value :: in9
open(194,file='outdata.txt')
write(194,*) 'in-value=', in9
! in9 = 1955
close(194)
end subroutine
!end function
So, jetzt, wenn es läuft, R stürzt ab, aber bevor es zu meiner Datei schreibt (outdata.txt) aber es ist nicht meine Nummer, vielleicht eine Art Adresse ...
Eine andere Frage, empfehlen Sie mir, den Code mit .C auszuführen und von C den Fortran-Code auszuführen oder ist es besser, ihn auszuführen. Fortran mit nur Fortran Code? Es scheint, wie .Fortran haben Problem Strings Handhabung oder das ist, was ich von zu verstehen: Interface func .C and .Fortran
Möglicherweise fehlt Ihnen in Ihrem Anruf ein '' '. Versuchen Sie es mit 'dyn.load (" 2dll.dll ")' – Magisch
Endlich funktioniert es, indem Sie alle Definitionen löschen und den Code so einfach wie möglich machen. – Smrow