作者Eleganse (王建闵)
看板C_Sharp
标题Re: [问题] C#与VB的整合
时间Thu Jun 18 12:35:36 2009
我仿照您的提议写出了下段程式码
========Class1.vb (Root namespace设定为CrossRawToData)====================
//此部份程式码已先行加入参考ImcCoreLib.DFile的函式库插件
Public Class Class1
Public d As Integer
Public thisFile As ImcCoreLib.DFile
Public Function OpenFile() As Integer
thisFile.Open(".\test.RAW", 0)
d = thisFile.DChannels.Item(1).Length
OpenFile = d
End Function
End Clas
//上段的作用,为创造一个类别,其中函数OpenFile()的作用,
为开启一test.Raw档案,并将第一栏的列数,回传给函数叫用者。
========C#部份======================
//此部份已先行将上面vb编程的Dll档汇入参考
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
CrossRawToData.Class1 CRTD = new CrossRawToData.Class1();
Console.WriteLine("{0}", CRTD.OpenFile);
}
}
}
//以上程式码,先NEW出一个上面VB所订的类别,
并叫用该类别的OpenFile函数,并列印於萤幕上。
=======执行後出现以下错误
Class1.vb
第五行
thisFile.Open(".\test.RAW", 0) -----> 并未将物件参考设定为物件的执行个体
百思不解。
※ 引述《taba (得登..得登...)》之铭言:
: 最近也在研究C#,没想到这.NET强调的功能竟然找了好几本书都没有,
: 最後在Professional C#的电子书上找到类似的@@ 写了个C#调用VB的
: DLL的小程式,你参考一下。
: File => New => Project => Visual Basic => Class Library
: 方案总管 => ClassLibrary1 => 右键 => Properties =>
: Root Namespace => 改成CrossLangTest
: Class1.vb
: ===========================================================
: Public Class Class1
: Public d() As Integer = {0, 1, 2, 3, 4, 5}
: End Class
: ===========================================================
: 上面的会被编成ClassLibrary1.dll。
: File => New => Project => Visual C# => Console Application
: 方案总管 => ConsoleApplication1 => 右键 => Add Reference
: => Browse => 加入刚才的ClassLibrary1.dll
: Program.cs
: ===========================================================
: using System;
: namespace ConsoleApplication1
: {
: class Program
: {
: static void Main(string[] args)
: {
: CrossLangTest.Class1 oVB = new CrossLangTest.Class1();
: foreach (int i in oVB.d)
: {
: Console.WriteLine("{0}", i.ToString());
: }
: }
: }
: }
: ===========================================================
: output:
: ===========================================================
: 0
: 1
: 2
: 3
: 4
: 5
: ===========================================================
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.61.67
※ 编辑: Eleganse 来自: 140.115.61.67 (06/18 12:40)
1F:推 taba:thisFile new了吗? 06/18 14:28
2F:→ Eleganse:New Class1应该就会创出就有变数成员不是吗? 06/18 15:01
3F:→ Eleganse:还是VB的写法是不同的,因为我的VB算是刚接触 06/18 15:01
4F:推 taba:会创出成员变数阿,不过你没写任何constructor编译器会自动提 06/18 16:09
5F:→ taba:供default constructor,它会把d设为0,把thisFile设为null 06/18 16:11
6F:→ Eleganse:我竟然把VB也要建构函数这件事忘了 感谢提醒:) 06/18 16:15
7F:→ taba:thisFile要new一下才会指向一个真正的物件,然後才能对它操作 06/18 16:16
8F:→ Eleganse:Public ... As....这些码在vb中不是new的意思吗? 06/18 16:18
9F:→ taba:c#:Class1 o = new class1(); vb.net:Dim o As New Class1() 06/18 16:24
10F:→ Eleganse:感谢taba,我试了2天终於成功了:) 真的是实用的技术 06/18 17:06