Ich habe zwei Perl-Module, die ich als Objekttypen für C# freigeben möchte. Einer von ihnen konstruiert Objekte des anderen Typs und gibt sie mit einer Methode wie unten gezeigt zurück. Ich füge einen Verweis auf Type2.dll in Type1.dll ein und referenziere beide in C#. Wie der Code zeigt, kann ich ein Type2-Objekt direkt in C# erstellen, aber ich kann kein Type2-Objekt zurückgeben, das durch eine Methode in Type1 erstellt wurde. Gibt es eine Idee?
(Dies ist ein Querverweis von http://community.activestate.com/forum/return-perl-object-different-perl-class-c .)
C#:
Type1 obj1 = new Type1(); // Works
Type2 test = new Type2(); // Works
Type2 obj2 = obj1.make2();
// Fails: System.InvalidCastException: Unable to cast object of type
// 'PerlRunTime.SV' to type 'Type2' at Type1.make2()
Perl: Type1.pm
package Type1;
use strict;
use Type2;
=for interface
[interface: pure]
static Type1();
Type2 make2();
=cut
sub new {
my $class = shift;
return bless {}, $class;
}
sub make2 {
my $this = shift;
return Type2->new();
}
1;
Perl: Type2.pm
package Type2;
use strict;
=for interface
[interface: pure]
static Type2();
=cut
sub new {
my $class = shift;
return bless {}, $class;
}
1;