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

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

ThorRussellAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
jkrConnect With a Mentor Commented:
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
 
jkrCommented:
The easiest way would be to pass an array of size 1:

data Data;

// fill struct

storeAndAnalyseChunk(&Data,1);
0
 
jkrCommented:
...or

data Data[1];

// fill struct

storeAndAnalyseChunk(Data,1);

respectively.
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
jkrCommented:
um, make the last one
data Data[1];

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

storeAndAnalyseChunk(Data,1);
0
 
ThorRussellAuthor Commented:
The array needs to be of size somewhere between 44,100 to 441,000 size 1 definitely wont do!
0
 
jkrCommented:
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
 
ThorRussellAuthor Commented:
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
 
SidFishesCommented:
"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
 
SidFishesCommented:
"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
 
jkrCommented:
I'd say http:#20423624 clears up the issue, so I tend to object to a delete.
0
All Courses

From novice to tech pro — start learning today.