Tôi hiện đang làm việc để thay thế ActiveX-Triển khai trong IE thông qua REST-API dựa trên node.js với chạy edge.jsGetObject với edge.js
Cho đến nay các ví dụ cơ bản từ trang được triển khai khá tốt. Tôi có index.js tôi thiết lập để
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);
});
Và simpleVbFunction.vb như
Async Function(Input As Object) As Task(Of Object)
Return Await Task.Run(Function()
Return "NodeJS Welcomes: " & Input.ToString()
End Function)
End Function
Cho đến nay rất tốt. Bây giờ tôi muốn có thể truy cập một ứng dụng chạy trên máy chạy node.js. Trong trường hợp này Catia (cũng có thể là Excel mặc dù)
thường cho điều này tôi muốn sử dụng một simpleVbFunction.vb như thế này
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
Tuy nhiên điều này không hoạt động. Tôi nhận được lỗi sau.
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)
Bây giờ tôi phải quản trị các kỹ năng VB.NET của tôi hơi bị gỉ và điều này có thể chỉ là một lỗi trong VB-Code của tôi nhưng tôi nghĩ đó là thứ khác. Có ai trong số các bạn đã có thể truy cập vào một COM-Object thông qua edge.js và nếu có thì điều này có thể như thế nào?
[sửa] OK. Tôi đã đi xa hơn một chút bằng cách chuyển sang C# từ VB (Ít nhất mã đã nhận xét để truy cập vào tên của ứng dụng Excel hoạt động). Nhưng điều này đã mở ra một vấn đề khác. Mã của tôi ở đây trông như thế này
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;
}
}
Bây giờ vấn đề là, rằng khi làm việc với Visual Studio và biên soạn dlls được bao gồm tự động (khi thiết CATIA như INFITF.Application). Nhưng với edge.js tôi nhận được lỗi rằng không gian tên INFITF không thể được tìm thấy. Bất kỳ ý tưởng làm thế nào để có được rằng làm việc?
Xin lỗi vì câu hỏi dài. Tôi sẽ dọn dẹp nó sau khi điều này được giải quyết.
[/ edit]