Launch exe without need for CVB to be installed

Hello

We have a software program coded in Delphi which we have recently been adding CVB functionality to after moving from a different brand of cameras.

We use TCVImage, TCVRingBuffer and TCVGrabber components and some of the associated functions and all the code complies and runs correctly.

However, as our program still needs to be compatible with the older cameras, for older users, we need the exe to be able to run WITHOUT CVB being installed. The way it’s currently written, of course, refuses to run without the dll’s in place.

What is the best way to go about this, please?

Thanks

Daniel

Hi @danielquintic,

the CVB runtime needs CVB being installed. That is given by the nature of any commercial installation, except for software that is provided plain DLL deployment.

DLL copy would not suffice as they require the licensing ecosystem at runtime.

What prevents you from installing CVB on your target?

Best,

Simon

Hello

The main reason for this is we are trying to make ONE exe which can use ONE of two types of camera - CVB cameras OR IDS cameras.

Our software has always been written solely for IDS cameras until a recent supply issue resulted in the need to offer CVB cameras.

The code now incorporates both sets of functions but we need the exe to be able to open WITHOUT requiring BOTH drivers to be installed - ie for someone who only owns an IDS camera, we don’t want them to have to install CVB just to be able to launch the exe, as they don’t need CVB for any other reason.

We’ve already done this successfully the opposite way (ie no need for IDS drivers to be installed) as we have used Delphi’s delayed keyword to ensure the dll doesn’t get loaded until it is needed, by which time we can launch the exe to check if the dll is there anyway.

As an example from our IDS link file, you have this at the top of the file…
function is_CaptureVideo(hF: HIDS; Wait: Longint): Longint cdecl;
…and this in the implementation…
function is_CaptureVideo; external uEye_Driver_DLL_Name delayed;

I was hoping to do similar with the CVB functions.

I can see how some can easily be cribbed across, such as
function ReleaseObject ( var P: OBJ ): Boolean; stdcall; external ‘CVCImg.DLL’;
which I can just borrow from iCVCImg.pas as this links nicely to the DLL.

However, a lot of the functions are setup via dispinterfaces and don’t seem to link explicitly to any given DLL. For eg you can find
function LoadImage(const Filename: WideString): WordBool; dispid 33;
in your CVImageLib_TLB.pas but that doesn’t link to a DLL specifically as it’s all part of defining the full TCVImage structure but I am a bit lost trying to pick through that, to be honest!

Thanks

Daniel

Hi @danielquintic ,

that - for me - only explains that you want to deploy your app in a single executable. Nevertheless, there will be dependencies, which have to be installed to the system, first. Please say so, if I’m drawing wrong assumptions.

I’m rather asking you for the necessity to skip the standard procedure of installing dependencies on your target system. CVB is - as compared most of other libraries - deployed over a installer. This brings all the necessities: The DLLs, the licensing service and the system configuration to use the latter. You can still deploy your app as one executable using that infrastructure.

I would also like to point you to the concept of our runtime installers, which can be used for a more “customized” deployment experience. Depending on your system this post can be interesting for you.

Hello

I’m afraid I think you have misunderstood what we are trying to achieve. I am not talking about trying to incorporate the CVB installer into our installer.

We have a piece of software which was originally written with IDS functions to use IDS cameras.

We have recently added in the ability to use CVB cameras controlled through your CVB functions.

As such, a customer of our software will use EITHER an IDS camera OR a CVB camera - never both.

If they own an IDS camera, therefore, their software will never need to attempt to use any of the CVB functions that are in the code, therefore we don’t want them to have to install CVB purely to be able to get the program open.

Thanks

Daniel

Hi @danielquintic ,

my bad - I may have overlooked some of the details.

Unfortunately, I’m not a Delphi expert and we dropped Delphi support recently.

I’m afraid, the following answer is only partially pleasing for you:

By design, we are restricted to static loading inside the ActiveX packages you are using (TCVImage, TCVRingBuffer and TCVGrabber), so there is no way to influence the DLL loading, there. Hence, no delayed loading possible.

Superficially, we can only think of one workaround to this:

You try to wrap the uses statement in your app by a IFDEF directive, and therefore create (at compile time) two different binaries for the two different use cases.

The only other way, we can think of, requires a huge lot of work: You try to use the CVB Delphi C interface and try to bring the functionality to ActiveX on your own.

If you aren’t happy with that, the best thing would be a request to our support at de.support@stemmer-imaging.com.

OK - Thanks for your advice. We came to the conclusion yesterday that the IFDEF option of making two exes and a separate “splitter” exe to decide which one to open was an interim solution which we could do for now. I will potentially come back to the more complicated option to resolve it properly in the future, but it sounds like a lot of work!

Thanks

Daniel

Sorry for being a bit late to the party but there is one thing I did not fully understand yet.
As far as I know, there should be a driver to be able to open IDS cameras as well.
Or at least I think there was in the past, maybe @Andreas can help us with some further information.

If this is still the case, you should be able to open pretty much any genApi compliant camera like Dalsa, Jai, AV etc. into your CVB application using the standard .vin driver or you could load IDS cameras by using the “ids vin” driver.
Thus one application using CVB (once written) should be able to handle all your processing tasks not bothering, which camera is actually connected at the moment, making your IDS based solution more or less obsolete (while still using the IDS cameras)
.

@Chris, yes CVB can work with any GenICam compliant cameras. If this is the case for all IDS models in use just CVB would be sufficient. But be aware that older camera models may not work or specific features may not be present on the standard interface. So a CVB only solution would require careful evaluation.

Hi @Andreas ,

thank you for the information, for some reason I thought to remember, that we had a dedicated IDS Driver.
@danielquintic even better for you because this means you have a decent chance, that your ids cameras simply work in CVB and you only need CVB for all your task.

Thanks for your help Chris and Andreas.

This does sound potentially useful if it is possible.

The specific models of IDS camera we are using are:
UI-3240CP-M-GL Rev.2
UI-3140CP-M-GL Rev.2
UI-3040CP-M-GL Rev.2

Do you think they could be run through CVB or are they too old models?

As regards possibly needing to use the “ids vin” driver, where would that be found, please?

If the IDS cameras were available via CVB, would they need some sort of licensing mechanism to avoid them coming up with a watermark, as with the other cameras that we use via CVB, you need to licence them to prevent a watermark appearing?

Thanks

Daniel

Hi Daniel,

the whole IDS vin driver thing was something I remembered incorrectly.
There is no dedicated IDS vin driver.
As long as the cameras are GenICam compliant, you should be able to open them with the default GenICam.vin that comes with CVB.

You can also just get the latest CVB Version and try, if your cameras are compatible. Its free to use with the only downside of having a watermark in the image (you can request a test license via the CVB License manager to get rid of this).

OK - No problem.

As regards opening IDS’s through CVB, presumably the first job is making them appear in GenICam Browser in the same way that our Flir cameras, for eg, appear.

Is there some specific way of doing this? Do I need to uninstall IDS Camera Manager? As currently, the IDS camera is plugged into the machine and visible in the IDS Camera Manager list but it’s still not visible in GenICam Browser.

It may be that ultimately we decide this is all infeasible anyway, however, due to the watermark issue, as this will mean that we’ll have to supply every current user of an IDS camera with a CVB licence (either software or dongle) to remove the watermark and currently this is 100% of our existing customers!

Thanks

Daniel

Hi Daniel,

I would try to install CVB on a testmachine (can be your desktop pc) and connect the IDS there.
If they dont appear in GenICam Browser (searching across subnets) then this is not a good sign at all.

Regarding the licensing… I think there will be a suitable solution. But this is something to be discussed outside the forum.
Once you validated whether or not CVB and your IDS cameras work together just contact our support via de.support@stemmer-imaging.com and my colleagues will have you covered.

As stated, on one of our machines here our IDS Camera appears in IDS Camera Manager but it doesn’t appear in GenICam Browser whatever “search” options you press. I have just tried with IDS Camera Manager not installed and it still doesn’t appear in GenICam.

I take it to mean that this will therefore not be possible?

Would newer IDS Peak cameras work through CVB, do you think?

Thanks

Daniel

Hello,

I believe that the IDS cameras being used are not genicam compliant, hence the need to use the older IDS SDK.

It may be worth checking with IDS to see if there is a firmware upgrade for the cameras to make then Genicam compliant.

1 Like

OK Thanks - I thought they’d probably be too old.

I will ask IDS whether there is a firmware update and whether that would maintain all the capabilities/speeds as required.

Thanks

Daniel