Obecnie pracuję zastąpić mój Implementacja ActiveX w IE poprzez REST API opartego na node.js z systemem edge.jsGetObject z edge.js
Dotychczas podstawowe przykłady ze strony wykonawczych obrobione całkiem dobrze. Mam moje index.js skonfigurować do
var edge = require('edge');
var edgeVb = require('edge-vb');
var path = require('path');
var helloVb = edge.func('vb', path.join(__dirname, 'simpleVbFunction.vb'));
helloVb('Testing with String', (err, res) => {
if(err) throw err;
console.log(res);
});
A simpleVbFunction.vb jak
Async Function(Input As Object) As Task(Of Object)
Return Await Task.Run(Function()
Return "NodeJS Welcomes: " & Input.ToString()
End Function)
End Function
tej pory tak dobrze. Teraz chcę mieć dostęp do aplikacji uruchomionej na komputerze, na którym działa node.js. W tym przypadku Catia (mogą być równie dobrze Excel chociaż)
Zazwyczaj do tego bym użyć simpleVbFunction.vb jak ten
Async Function(Input As Object) As Task(Of Object)
Return Await Task.Run(Function()
Dim CATIA as Object
set CATIA = GetObject(, "CATIA.Application")
Return CATIA.ActiveDocument.Application.FullName
End Function)
End Function
Jednak to nie działa. Otrzymuję następujący błąd.
Error: Unable to compile VB code. ----> Errors when compiling as a CLR library: C:\Users\xxxxxx\AppData\Local\Temp\4hf2uw3z.0.vb(1,0) : error BC30203: Bezeichner erwartet. ----> Errors when compiling as a CLR async lambda expression: C:\Users\xxxxxx\AppData\Local\Temp\cypj4ltp.0.vb(7,0) : error BC30451: "GetObject" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden. at Error (native) at Object.exports.func (C:\Users\xxxxxx\coding\node\tst_win32ole\node_modules\edge\lib\edge.js:169:17) at Object. (C:\Users\xxxxxx\coding\node\tst_win32ole\index.js:6:20) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Timeout.Module.runMain [as _onTimeout] (module.js:604:10) at ontimeout (timers.js:386:14)
Teraz muszę Administrator VB.NET moje umiejętności są trochę zardzewiały, a to może być po prostu błąd w mojej VB-Code, ale myślę, że to coś innego. Czy ktokolwiek z was był w stanie uzyskać dostęp do obiektu COM za pośrednictwem pliku edge.js, a jeśli tak, to w jaki sposób było to możliwe?
[edycja] OK. Przyszedłem trochę dalej, przełączając się na C# z VB (Przynajmniej kod został skomentowany, aby uzyskać dostęp do nazwy prac aplikacji Excel). Ale to otworzyło kolejny problem. Mój kod tutaj wygląda to
using System.Threading.Tasks;
using System;
using System.Runtime.InteropServices;
// using INFITF;
public class Startup
{
public async Task<object> Invoke(object input)
{
// dynamic xl = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
// return xl.Name;
object CATIA0 = Marshal.GetActiveObject("CATIA.Application");
INFITF.Application CATIA = CATIA0 as INFITF.Application;
}
}
Teraz problemem jest to, że podczas pracy z Visual Studio i kompilacji bibliotek DLL uzyskać włączone automatycznie (przy ustawianiu CATIA jako INFITF.Application). Ale z plikiem edge.js dostanę błąd, że nie można znaleźć przestrzeni nazw INFITF. Jakieś pomysły, jak to działa?
Przepraszamy za długie pytanie. Sprzątnę to po tym, jak zostanie rozwiązany.
[/ edit]