Pass Hex String to DLL

Hello there,
I have a Visual Studio compiled DLL that expects the following:
CHAR command[] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
How do I express this as a TS Local? Can I express this a String as "0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06" or do I need to segment and convert each char in the string - this would seem laborious.
And yes... I'm rusty!
-Chroma

Thanks for the reply! I tried your original suggestion, with the local being set in a statement. On calling my DLL via Visual Studio, the following buffer was passed (see attached .jpg):
IN
Locals.string = "\xAA\xBB\xCC\xDD\xEE\xFF\x00\x01\x02\x03\x04\x05\x06"                                                                  
OUT (Visual Studio DLL source)
aa bb cc dd ee ff 5c 78 30 31 02 03 04 05 06
It's interesting to note that the "\" and "x" chars have been added in and the "\x00" and "\x01" have not been correctly converted. I tried the different command string, which is more representative of our application (see attached .jpg):
IN
Locals.string2 = "\x03\x00\x00\x00\x00\x00\x05\x00\x05\x03\x00\x01\x00"
OUT (Visual Studio DLL source)
03 5c 78 30 30 5c 78 30 30 5c 78 30 35 5c 78 30 35 03 5c 78 30 31 00
It looks like this approach perhaps(?) highlights an issue with TS, when a "\x00" is encountered. On another note, I think the array of numbers to a string example is useful but thinking this through, I believe we'll be using the Property Loader to bring in the locals as strings.
Any other thoughts?
Regards,
-Chroma
Attachments:
Cmd as Statement Step.jpg ‏75 KB
Cmd as Statement Step - Real Data.jpg ‏75 KB

Similar Messages

  • Passing (byref) String from Java to C++ via JNI

    I wish to pass a string to a C++ Dll as a parameter in a function. The problem is that I don't know howto receive back the data after it is filled in the C++ dll. I am trying to do what is called passing parameters by reference.
    Java Code:
    public class ABKeyBoard {
    public native long leerBanda(int pista, String datos);
    public static void main(String[] args) {
    String datos=new String();
    System.loadLibrary("ABKeyBoard");
    new ABKeyBoard().leerBanda(1,datos);
    System.out.println(datos); //the content of datos here is empty.
    C++ Code:
    Java_ABKeyBoard_leerBanda(JNIEnv *env, jobject obj,jint pista, jstring datos)
         char buffer[2024];
         memset(buffer,     0x00,     sizeof(buffer));
         strcpy(buffer, "xxxx");
         datos = env->NewStringUTF(buffer);
    return;
    Thanks for your help.

    In java every parameter are always passed by value.
    The datos parameter is a local copy of the string
    reference you pass to the method.This is wrong. The String passed to the native method is the same String object you use in Java. Although everything is passed by value in Java, what is actually passed by value is the reference to the String. This means that you can modify the object you pass, but you are not allowed to change the reference to point to a totally different object. That is where the problem is coming in.
    The trouble is that it is illegal to modify a String, even from native code. If you need to make changes in-place to the text, pass an array of chars (if your native code uses Unicode), an array of bytes (if it uses normal 8-bit characters) or a StringBuffer. You can legally modify any of these data structures with the new data. But the StringBuffer object is the only one whose length can be changed after it is created. Unfortunately it is also the hardest to use from JNI.
    Generally I think you should always pass arrays of bytes/chars to native code instead of Strings when possible. They can be modified in place, and you can use String's methods to get a byte-array in the platform's proper encoding. Using the GetStringUTFChars method is problematic because UTF only maps directly onto ASCII in the case of characters which are in the set of 7-bit ASCII characters. Your code will do wrong things if your String happens to contain some other character, unless your native code expects UTF format strings.
    The good news is that C(++) functions which return results in their arguments do not ordinarily change the length. So you should be able to allocate a byte[] or char[] ahead of time of the appropriate size (don't forget to add the trailing null, which is not a component of Java strings). I think byte[] or char[] is the best answer because you can easily map those onto C-style arrays with Get[Primitive]ArrayRegion; the return of that is suitable for passing directly to native code, as long as you have remembered the null-terminator. For instance you could do (*env)->GetByteArrayRegion(env, javaArray, 0, arrayLength, CArray) and then your CArray would be changed to point at the contents of the javaArray (note: it does not copy data into CArray, it changes CArray to point at the array contents, so do not allocate memory for CArray first). Then when you do ReleaseByteArrayRegion the results will be propagated back to Java.

  • Pass VISA resource to DLL created by CVI

    Hi, I want to call a DLL created by Labwindows CVI in Labview.
    When I use ' Call Library Function Node', I have to define the parameters output in DLL. However, there is one 'VISA Resource' type parameter and I don't know which shoudl be the right in Labview's definition.
    Anyone can help about that? Or maybe there are some easy way to do this?
    The type in CVI is: 'ViSession g_hSA'
    Thanks in advance.
    BR
    Gavin
    Attachments:
    dll.JPG ‏36 KB

    There are several issues here. First, a VISA Resource (or other string name resources in LabVIEW) are really a combination of a name and a session ID. If the session ID is invalid, LabVIEW will automatically open a session ID using the string name based on the refnum type. Obviously this won't work in a C function interface anymore as one does not have access to the low level C APIs in the LabVIEW kernel to treat the LVRefnum in such an dual mode way.
    What does work is to pass the string to the first function as C String, and do an explicit VISA Open there, then return the VISA session to the caller as LVRefnum and treat it from there as such.
    The LabVIEW Call Library Node does a few intrinsic conversions based on the configured datatype.
    If you configure the parameter as String, LabVIEW will pass the resource name to the DLL function.
    If you configure it as (U)Int32 (and in fact more precisely as pointer sized integer), LabVIEW will extract the underlaying ViSession from the VISA library and pass that one. You should use pointer sized integer instead of 32 bit integer, since a ViSession is really equivalent to a pointer and therefore would be 64 bit large in 64 bit LabVIEW.
    If you configure the parameter to adapt to type, LabVIEW will pass its own VISA refnum to the function. This refnum is a LabVIEW intern entity, (and alwasy 32 bit in size and only valid inside the LabVIEW session who created it) and really wraps the ViSession into a LabVIEW refnum for internal bookkeeping reasons.
    However the original post also shows TD1 errorIn and errorOut datatypes. This looks suspicially like an error cluster and that would be a thing that you can not easily create in non-LabVIEW land in a way, that LabVIEW will not crash when trying to access it.
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Is it possible to pass a string from an applet to the web site?

    Hi, everybody!
    Is it possible to pass a String from an applet to a web site (as a field value in a form, an ASP variable, or anything else). Basically, I have a pretty large String that is being edited by an applet. When a user clicks on the submit button, a different page will show up which has to display the modified string. The String is pretty large so it doesn't fit into the URL variable.
    Please, help!
    Thank you so much!

    Why do you want to do this in Java?
    Javascript is the correct language for these type of situations.
    for instance:
    in the head of your html document:
    <script language=javascript type="text/javascript">
    createWindow(form){
    if(form.text.value!=""){
    newDoc = new document
    newDoc.write(form.text.value)
    newWin = window.open(document,'newWin','width=200;height=150')
    </script>
    in the body:
    <form onSubmit="createWindow(this)">
    <p>
    Enter a String:<input type=text size=30 name="text">
    </p><p>
    <input type=submit value="submit"> 
    <input type=reset value="reset">
    </p>
    </form>

  • How to pass a string value from XL sheet cell to SQL query.

    Hi,
    I am using SQL query in XL sheet to fetch some data. for that i am using ODBC connection. Now I want to pass a string from XL sheet Cell value in the where clause of Select statement, Please let me know how to do this.
    Below is My code:
    nge("A4").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
    "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=xyz;PWD=xyz;SERVER=xyz;" _
    , Destination:=Range("A4"))
    .CommandText = Array( _
    "SELECT CRYSTAL_REPORT1.PROJECT, CRYSTAL_REPORT1.OBJECT" & Chr(13) & "" & Chr(10) & "FROM NAIODEV.CRYSTAL_REPORT1 CRYSTAL_REPORT1" _
    .Name = "Query from gg"
    Thanks,
    Priya

    What does "XL" (whatever that is) have to do with Crystal Reports which is what you are obviously working with have to do with the Oracle database?
    The rules for using Crystal with Oracle are quite clearly described in all the Crystal Reports docs ... you MUST use IN OUT ref cursors unless you are doing direct table or view access.

  • Which bytes should be edited in a WMF hex string stored in an RTF file in order to change image dimensions?

    I  would like to save the WMF file with proper dimensions as they are in the editor (my saved WMFs have the dimensions of my screen resolution).  They come from a RichEdit.
    Thanks.
    Edit:
    My goal is to convert the images that appear on a RichEdit to another format.
    Here is the fragment of the RTF:
    {\pict\wmetafile8\picw7407\pich9259\picwgoal4199\pichgoal5249 
    010009000003703e020000005a3e02000000050000000b0200000000050000000c022b24ef1c5a
    ffffffffffffff030000000000
    }\cf2\lang1033\b\f1\fs23\par
    For each 2 chars in this string I converted it to hex and saved it through a memory stream. Then I opened it in Paint or GIMP and there is the image.  I even can convert it to a PNG file through ImageMagick tool. But the dimensions are wrong. How to fix
    this?
    I am using Lazarus.
    I could guess that the header is not OK, but how they can be opened by Paint and converted? So I guess the dimensions info is wrong in the header. In GIMP even the dimensions are right, here a link to the GIMP's dialogbox confirmation with the dimensions
    it has encountered in the file (  http://s13.postimg.org/s536tgo9z/Metafile_in_GIMP.png  ).
    So the info is there, but is wrong. When I open the images in Paint, they are wrong. Microsoft Office Picture Manager can also open them correctly, but could not convert them so. I need to do it programmatically. TMetafile Delphi class could not open these
    files as well in order to be converted. So I could only edit the bytes.
    My RichEdit WMF data can not be accepted by ComputeAldusChecksum routine nor get a handle from SetWinMetaFileBits API call, which would convert it to an EMF format.
    procedure TMetafile.ReadWMFStream(Stream: TStream; Length: Longint);
    var
    WMF: TMetafileHeader;
    BitMem: Pointer;
    MFP: TMetaFilePict;
    begin
    NewImage;
    Stream.Read(WMF, SizeOf(WMF));
    if (WMF.Key <> WMFKEY) or (ComputeAldusChecksum(WMF) <> WMF.CheckSum) then
    raise EComponentError.Create('Invalid metafile.'); // <<<<<<<<<<<<<<< exception here
    Dec(Length, SizeOf(WMF));
    GetMem(Bitmem, Length);
    with FImage do
    try
    Stream.Read(BitMem^, Length);
    FImage.FInch := WMF.Inch;
    if WMF.Inch = 0 then
    WMF.Inch := 96;
    FWidth := MulDiv(WMF.Box.Right - WMF.Box.Left,25400,WMF.Inch);
    FHeight := MulDiv(WMF.Box.Bottom - WMF.Box.Top,25400,WMF.Inch);
    with MFP do
    begin
    MM := MM_ANISOTROPIC;
    xExt := 0;
    yExt := 0;
    hmf := 0;
    end;
    FHandle := SetWinMetaFileBits(Length, BitMem, 0, MFP); 
    if FHandle = 0 then
    raise EComponentError.Create('Invalid metafile.'); // <<<<<<<<<<<<<< exception here
    Enhanced := False;
    finally
    Freemem(BitMem, Length);
    end;
    end;

    Hi Antônio G,
    Based on your description, I’m afraid that it is not the correct forum for this issue, since this forum is to discuss:
    Visual Studio WPF/SL Designer, Visual Studio Guidance Automation Toolkit, Developer Documentation and Help System, and Visual Studio Editor.
    To make this issue clearly, would you mind letting us know more information about this issue? Which language are you using? Which kind of app are you developing?
    Reference:
    https://social.msdn.microsoft.com/Forums/vstudio/en-US/a9e1857d-dd5b-443b-8633-397aea6e7b8c/help-on-properly-handling-wmf-mmanisotropic-image-in-rtf-file-when-extracted?forum=csharpgeneral
    https://social.msdn.microsoft.com/Forums/vstudio/en-US/5b99d331-ef56-4d60-bf12-3e3b70783376/how-to-convert-a-hex-string-save-in-a-rtf-file-into-an-image-jpg-or-bmp?forum=csharpgeneral#a9219408-f73b-4e98-a9d8-7a1e0f20cdd9
    Maybe you could select the language development forum for this kind of issue. If not, please let me know more information about it, I will help you find a more appropriate forum.
    Best Regards,
    Jack
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Passing a string into an SQL query IN statement

    Hello,
    I need to connect to a database to pull some data to dynamically create a form based on the data I pull back. My SQL query works fine when I manually run it through a SQL client tool, but when I try to pass it through my workflow I'm having trouble with passing my string into the IN part of the statement. So if for example my SQL query is:
    SELECT Field1, Field2, Field3 FROM Table1 WHERE Field4 IN (?)
    I have a process variable that has the string I'm trying to pass into the ?, but I don't seem to be able to get the query to run. I have tried setting up my query to run as a Parameterized Query (passing my string process variable into the ?), and by setting the query up through xPath (where I am calling my process variable with an xPath declaration), but am not having any luck.
    The process variable I am trying to pass is formatted such that I'm passing 'Value1','Value2','Value3' but I can reformat this string if need be. Even with using test data I can't get the query to return anything. For test data I have tried: 'Value1','Value2','Value3' ; Value1','Value2','Value3 ; Value1,Value2,Value3 but the query never returns any data. I can't seem to see how to format the string to pass into the query. The Query will work with a single Value in the test data, but as soon as I try to pass multiple values within the string it fails. Any suggestions?

    The problem looks to be a limit on what I can pass into the SQL query component. My string is coming from data returned from another database. I take the xml output from that database call, pass it through a set variable component to remove my xml tags from the string, and then format the string in a script component (I have to do it this way because of the way the data coming out of my first database call). I've put in loggers, and can see that the string I'm passing into my query that is giving me problems, is formatted the same way as if I were to use the concat function Scott listed above. It looks like there is a limitation on what can be passed in my variable. I have tried creating my entire SQL query statement in a set variable component, and then just calling the process variable that holds that statement, but there is a character limit of 128 character for what can be passed in a variable through xpath in the SQL query component.
    The next thing I tried was changing my SQL where clause. Instead of passing my variable directly into the IN statement I set up a PATINDEX('%:'+countyname+ ':%', ?) > 0 call to check for the values in my database call. As you can see I took out the "," that I was passing as part of my string, thinking that the SQL component was getting confused by them, and placed ":" characters around my values being passed in my string variable. No matter what I try to do though I'm not able to get the query to run. The component looks like it is taking my string, and is seeing the whole thing as a string instead of passing it as individual values within a string.
    I think I'm getting close, but I keep getting a Content not allowed in prolog exception in the server logs.

  • Converting a Hex String to an Int

    I have a quick question. I am attempting to encode an Integer as a Hex String using Integer.toHexString(), which produces a max of eight hex characters.
    I then need to convert this string back to an integer. I tried using Integer.parseInt(string, 16), but this only works for positive integers, because it expects a negative number to be designated with a "-" sign, which is the behavior of Integer.toString(int, 16).
    I do not wish to represent the "-" sign in that manner, because I want to minimize the length of the hex string.
    This method is time-critical, and I would like it to be as simple as possible, so I am looking for a solution in the standard libraries. Does anybody know of a method to convert the eight character hex representation which includes the sign bit as part of the eighth character back to an int using a method provided by the libraries?

    int intVal = (int)Long.parseLong(str, 16);

  • How could I choose some bytes from HEX string and then convert it to a decimal value?

    Hi I am working with an OMRON E5EN temperature controller using VISA serial to get data, I send the Read from Variable Area command and get this string  in hexa 0230 3130 3030 3030 3130 3130 3030 3030 3030 3030 3041 3203 71 or .01000001010000000000A2.q in ASCII this string means:
    02 STX
    3031 3030 Node and subadress
    3030 End Code Normal Completion
    3031 3031 Command Read from Variable Area
    3030 3030 respt code Normal completion
    3030 3030 3030 4132 Hexadecimal A2 = 162  (this is the temperature data that I want to show in decimal)
    03 ETX
    71 Block Check Character
    I want to choose the eight bytes for the temperature data and convert it to a decimal number. I have seen the examples to convert a Hexa string to decimal but I do not know how to choose the specifics bytes that I need.
    I have look for a driver but i didn´t find any. I am a beginner so please include especific topics for me to study in your answer.
    Thanks
    Carlos Fuentes Silva Queretaro Mexico 

    If the response always has the temperature starting with byte 15 and is always 8 bytes in length, you can use the String Subset function to get those bytes out of the string.  Then use Hex String to Number to convert to a decimal number.
    Well someone already beat me to the solution:
    Message Edited by tbob on 01-04-2008 04:42 PM
    - tbob
    Inventor of the WORM Global
    Attachments:
    HexStr2Decimal.png ‏7 KB

  • How to pass a String and make it as Color Object

    I need to set a background color dynamically...but the value that i pass is in string format. How can i convert the string into Color format so that i can use the method setBackground(Color.blue) method. How to pass the string into the 'Color.blue' ?

    Let param="red"
    Class cls = Class.forName("java.awt.Color");
    java.lang.reflect.Field fld = cls.getDeclaredField(param);
    Color clr = (Color)fld.get(null);
    You can use this 'clr' variable as you wish.
    null

  • Non-hex character in hex string after upgrade to Yosemite

    Hi,
    When I try to open some of my files I get an error: "Acrobat PDF File Format is having difficulties. Non-hex character in a hex string". I could open the files before.
    The only thing I've done since I opened the file last was to upgrade to Yosemite. The error occurs on both my Mac Pro (late 2013) and Mac Book Pro with Yosemite. Unfortunately, I have no access to a Mac with Mavericks and CS6 but I will try to fix one to verify that the file works there.
    Affected files  (Created in Illustrator CS6 on Mavericks):
    services.ai
    visual guidelines v.0.4.pdf
    visual guidelines.ai
    Tested steps:
    Open previous versions of the same file from our repository
    Update Illustrator CS6 to latest version
    Download Illustrator CC
    Tried to Place the file into another file (same error)
    Tried to repair file Enable content recovery mode | Illustrator CS2-CS5

    Hi svepdesigncenter,
    How you are accessing those files from your repository?
    There might be chances of getting files corrupted when transferring.
    File may have been sent as ascii when it should have been sent as binary or vice versa.
    In 99% of transfers it's ALWAYS safest to zip an AI or eps file before sending it anywhere.
    Regards,
    Sumit Singh

  • Non-hex character in a hex string error message

    Hi everyone,
    I encountered n error message in Illustrator "Acrobat PDF File Format is having difficulties. Non-hex character in a hex string." when trying to open a particular file.
    File was originally created on a Windows 7 PC, tried opening file on Mac OS 10.7.5, same Illustrator version 18. Also tried opening in PDF, Distiller, but didn't help.
    Did tried to change Illustrator Preferences in both Windows and Mac, following the steps in the TecNote:
    http://kb2.adobe.com/cps/500/cpsid_50031.html
    When trying to open the file from the File > Open menu, with the keys held down, it did not open a blank file window, neither did it created a duplicate copy in the Finder where the file is located.
    The file in question had about 15 artboards,  a few embedded images, approx 2.6MB size.
    Any suggestions/assistance would be greatly appreciated.
    Thank you.

    Hi Monika,
    The file was .ai file, as mentioned earlier, was created in Illustrator ver 18.
    Not emailed, stored in the folder, on the Windows PC, not a server. Last saved few days ago, tried to reopen the file from the same computer, but could no longer opened.
    No, Illustrator did not crash, just the error message "Acrobat PDF File Format is having difficulties. Non-hex character in a hex string."

  • Non-hex character in a hex string

    My Illustrator file will not open in Illustrator and I get the "non-hex character in a hex string" window whenever I try to open it. It does open in Acrobat but nothing else. I can't even save it as a pdf file..
    Is there any way I can get around that or fix it?

    karam,
    The first thing to try is to use File>Place in a new document and see how much, if anything, is saved this way.
    The next thing to try is to repair the file code, which is more difficult. The basics are told in this TechNote, the actual recovery consists of changing/adding/deleting code.
    http://kb2.adobe.com/cps/500/cpsid_50031.html

  • How can I pass a String by reference in java?

    Hello!
    My question is how to pass a String by reference in java.
    I tried to declare my variable, instead of using "String xxx = "f";", I used "String xxx = new String ("f");" :
    public static void main (String []args)
    String xxx = new String("f");
    StatusEnum result2 = getErrorPointStr(xxx);
         public StatusEnum getErrorPointStr(String text)
              StatusEnum testStatus = StatusEnum.PASS;
              StringBuffer buffer = new StringBuffer();
    buffer.append("123");
              text = buffer.toString();
              return testStatus;
    After calling to getErrorPointStr(String text) function, xxx = "f"
    So it does not work.
    How can I solve this? It is very important, the function will receive String and not something else.
    Thanks!

    Tolls wrote:
    Which is why I said:
    Which is why you only managed to change what 'text' referred to in the methodExcept that's not why. Even if String was mutable, doing text = whatever; would have the same effect; it would change what that variable refers to in the method, but it would not change the object's state.
    I meant that, since there was no way to actually change the data (ie the char[] or whatever) within the object 'text' referred to, the OP was attempting to change what 'text' referred to and hoping it would be reflected outside the method...which we know won't happen as Java is pass-by-value.\Ah, now I see.
    These by-value/by-reference threads tend to get confusing, because usually the person is passing a String, so the immutability of String tends to get in the way and just muddy the waters.

  • Re: Passing a string from Java class to JSP

    How can I pass a string from a function within my bean class to my JSP page?
    I would like to pass something like this with the necessary params filled in:
    String myString ="Successful <b>" + Sales.getActionType() + "</b> was made on <b>" + (new Date()).toString();
    The ActionType will be either a BUY or SELL and the current date need to be added in.
    Thank you in advance!

    SOLVED THE PROBLEM!!!

Maybe you are looking for

  • How to "select all" trimming photo length in iMovie

    I'm creating a motion capture animation with legos and the default duration for the photo clip is 4.0 seconds. I need to trim them ALL to .5 seconds to achieve the animation I'm looking for but can only see how to do them individually. Is there a "se

  • Will a factory unlocked iPhone stay unlocked if sync with another iTunes account?

    I just got my ATT iphone officially unlocked.  If I reset the phone to factory defaults so my daughter can borrow it for her trip to Europe, will it lock again?  She would probably sync it with her iTunes and personalize it for her use.  When she get

  • OT: Kudos to our Aces

    This is really off topic for Apex, but I just received the new Oracle Magazine and started reading an article about the ACE program. I was surprised when I read that OTN just got their 100th Oracle ACE. So, with that as a background, mucho kudos to t

  • Sys_refcursor

    hi experts, can you check it script not working CREATE OR REPLACE PROCEDURE PR_P1(P_DIA NUMBER,P_REV OUT SYS_REFCURSOR) IS BEGIN OPEN P_REV FOR SELECT CODE FROM t WHERE IID=P_DIA; END; script: ======== SET SERVEROUTPUT ON DECLARE V_REV SYS_REFCURSOR;

  • Error in Output messages

    Hi I was getting error repeatedly in output messages of contract. Due to changes in a field in contract , an output message is getting triggered. But the message is not getting procressed and is in status :incorrectly processed". When i check the pro