Solved

Calling a C++ dll with ColdFusion, ColdFusion cannot pass pointers as required

Posted on 2007-12-05
12
630 Views
Last Modified: 2013-12-20
We have an existing C++ dll for processing data the has been used for a few years in our products. We are not develolping a web based SAAS version of our product, and need to integrate ColdFusion in with the .dll. The trouble is the C++ dll expects an array of data, passed as a pointer to the start of the array, but ColdFusion cannot deal with pointers.
The dll function prototype is
void SpeechAnalyseRT::storeAndAnalyseChunk(short int* data, unsigned long dataLength)
and has virtual function
virtual void CALL storeAndAnalyseChunk(short int* data, unsigned long dataLength) = 0;
How do we change this to pass by value? it has been suggested that we use a struct with an array inside. What is the syntax to make this work, i.e. declaring the struct etc?
Is this the right thing to do?
Thanks
Thor

0
Comment
Question by:ThorRussell
  • 6
  • 2
  • 2
12 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 20417014
The easiest way would be to pass an array of size 1:

data Data;

// fill struct

storeAndAnalyseChunk(&Data,1);
0
 
LVL 86

Expert Comment

by:jkr
ID: 20417017
...or

data Data[1];

// fill struct

storeAndAnalyseChunk(Data,1);

respectively.
0
 
LVL 86

Expert Comment

by:jkr
ID: 20417020
um, make the last one
data Data[1];

// fill struct
Data[0].nSampleMember = 42;

storeAndAnalyseChunk(Data,1);
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 

Author Comment

by:ThorRussell
ID: 20417231
The array needs to be of size somewhere between 44,100 to 441,000 size 1 definitely wont do!
0
 
LVL 86

Expert Comment

by:jkr
ID: 20417268
If you cannot supply such aq range, there definitely is a problem... a conceptional one. Pointers and arrays are interchangeable in C/C++, so you should be fine with both. Changing an existing function is out of question, unfortunately.
0
 

Author Comment

by:ThorRussell
ID: 20423136
Are you trying to say it cant be done? There must be a way to let coldfusion call a C++ dll.
What do you mean by changing an existing function is out of the question? The dll is mine, so I can change it how I like. I want it to accept the array by value rather than pointer.
0
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 20423624
Well, if you are creating the DLL you can of course change anything you want. But in C/C++, array *are* in fact pointers to the 1st element in the array, and that is something which is going to be hard to change.
0
 
LVL 36

Expert Comment

by:SidFishes
ID: 20428782
"There must be a way to let coldfusion call a C++ dll. "

i'm not familiar with the internals of c++ but i do know how to use them with cf...

just register a cfx custom tag

cfadmin -> cfx tags -> Register C++ CFX -> name tag cfx_yourDLLName -> choose path to dll

note that if your dll is called foo you need to name the tag cfx_foo

then call the dll like so

<cfx_foo expectedInputparameter1="#somevar1#"
              expectedInputparameter2="#somevar2#">

then the output would be something like

<cfoutput>
#outputParamStuct.outputParam1#
</cfoutput>  

where outputParamStruct is the struct containing value or values returned by the dll and outputParam1 is the value itself.




0
 
LVL 36

Expert Comment

by:SidFishes
ID: 20428797
"note that if your dll is called foo you need to name the tag cfx_foo"

to be more specific

note that if your dll is called FOO.DLL you need to name the tag CFX_FOO (no extension)
0
 
LVL 86

Expert Comment

by:jkr
ID: 25397274
I'd say http:#20423624 clears up the issue, so I tend to object to a delete.
0

Featured Post

Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Objective of This Article In 1990’s, when I was a budding software professional, I had a lot of confusion about which stream or technology, I had to choose to build my career. In those days, I had lot of confusion like whether to choose System so…
This guide will walk you through the essential considerations and tech stack for building scalable websites. Know how to grow your business the smart way!
The purpose of this video is to demonstrate how to reset a WordPress password if you are locked out and cannot reset the password. A typical use would be if you cannot access the email to which WordPress would send the password recovery email to…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

786 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question