Page 1 of 1
SideBySide: X# DLL to use in VO
Posted: Tue Sep 19, 2017 1:54 pm
by ic2
We want to replace our Vulcan DLL with a X# DLL, which means that we we have to go through the whole process again. This is how Vulcan program starts:
BEGIN NAMESPACE IC2VulcanMethods
[ClassInterface(ClassInterfaceType.AutoDual)];
[Guid("487BF093-A8F9-4119-82EB-414A78FCF342")] ;
[ComVisibleAttribute( TRUE )];
CLASS VoVulcanClass
When I do the same (with a freshly generated GUID) in the X# DLL, I get the following error:
Error XS9002 Parser: unexpected input 'CRLF', are you missing a closing ')' or '}' ? IC2ExtLibForVO D:XSharpProjectsIC2ExtLibForVOIC2ExtLibForVO_StartData.prg 26
What should I change in X# to get this working?
Dick
PS: I saw I just posted subject 100. Does this entitle me for a price?
SideBySide: X# DLL to use in VO
Posted: Tue Sep 19, 2017 2:44 pm
by wriedmann
Hi Dick,
this is code from my own (working) COM-Component:
Code: Select all
[ComVisible(true)];
[Guid("EFCF1B80-9602-4282-A7F9-4CD3384484D4")];
[ClassInterface(ClassInterfaceType.None)];
[ProgId("EPPLusComponent.XlsxFile")];
public class XlsxFile implements IXlsxFile
and I need a
Code: Select all
using System.Runtime.InteropServices
Wolfgang
SideBySide: X# DLL to use in VO
Posted: Tue Sep 19, 2017 3:04 pm
by Chris
Hi Dick,
The code as you posted it here is fine, it will not give any parser error messages. I suspect when you got this error, you had omitted one of the ";"s at the end of on of the attribute lines. Try a rebuild now, does the error go away? If not, at which line and col does it point?
btw, that was post #100 in the specific subcategory only. Maybe we can do something for subject #1000 overall (we're at 388 now) or at post #10,000 (2,693 now)
Chris
SideBySide: X# DLL to use in VO
Posted: Tue Sep 19, 2017 3:55 pm
by ic2
Hello Chris, Wolfgang.
I knew it was only the 100th posting here
I found the problem. It was an empty line between the code and the class. Removed it and it compiles. I will now try to finalize this (checking Wolfgangs remarks as well, I did not use the ProgId so far) and write a short summary if it works.
Dick
SideBySide: X# DLL to use in VO
Posted: Tue Sep 19, 2017 6:33 pm
by ic2
After the usual problems I got it working, this is what you have to do to call methods in a X# DLL (in my case it is C# and X# code) from VO without the need to Regasm the DLL"
What I did is this:
1 In the properties of the project, Build Events, Post-build I added this (first without the rem) (you may have to change the path to mt.exe):
rem "C:Program Files (x86)Windows Kits10binx64mt.exe" -managedassemblyname:$(TargetFileName) -nodependency -out:$(ProjectDir)$(ProjectName).manifest
"C:Program Files (x86)Windows Kits10binx64mt.exe" -manifest "$(ProjectDir)$(ProjectName).manifest" -outputresource:"$(TargetFileName)";2
Copy "$(TargetDir)*.dll" "c:somewhere"
2 In the VO Manifest file, included in the exe, I started with the Appwizcctl6.man file, changed the program name and inserted
<dependency>
<dependentAssembly>
<assemblyIdentity name="IC2ExtLibForVO" version="1.0.65534.65534" processorArchitecture="msil"></assemblyIdentity>
</dependentAssembly>
</dependency>
Note that for the Vulcan DLL I wrote a few years ago I had to use processorArchitecture="*". For X# the program won't start, in the application log you'll find this error:
Activation context generation failed for "d:XSharpVOTestXSharpVOTest.DBG".Error in manifest or policy file "d:XSharpVOTestIC2ExtLibForVO.DLL" on line 1. Component identity found in manifest does not match the identity of the component requested. Reference is IC2ExtLibForVO,processorArchitecture="x86",version="1.0.65534.65534". Definition is IC2ExtLibForVO,processorArchitecture="msil",version="1.0.65534.65534". Please use sxstrace.exe for detailed diagnosis.
Apparently the DLL is supposed to be based on 'msil' (while I would say it's x86, see earlier discussions in this forum) - msil is introduced in VS 2015 and makes the OS chosoe between 32 and 64 bits I read.
3 I copied the DLL's generated (recompiled hem with REM in the first line which I remember was something which needed to be done for some reason) and then I could start the VO exe, and run methods from the DLL.
When I have this 100% ready I'll make a full descriptions for Examples.
Dick
SideBySide: X# DLL to use in VO
Posted: Tue Sep 19, 2017 11:42 pm
by robert
Dick,
One of the problem in your message has to do with automatic version number generating:
you are using the syntax to automatically generate a version number for your assembly
Code: Select all
[assembly: AssemblyVersion("1.0.*")]
This will automatically generate the 3rd and 4th part of the version number.
Each time you recompile the version number will change !
For an assembly that implements a COM interface that is usually not a good idea. You may want to control the complete version number in your code.
Robert