Login Page - Create Account

Support Board


Date/Time: Mon, 23 Dec 2024 23:08:58 +0000



retrieving string file name from settings to be played in playfile

View Count: 1049

[2015-10-19 12:10:49]
KhaosTrader - Posts: 128
Hi,

I am having problems, figuring out how to make the filename a setting for the alert.

sc.PlaySound(SoundFileName.GetString(), 1);

is having problems, what must I do to make this work?

Thank you for your help on this.
[2015-10-19 17:39:03]
Sierra Chart Engineering - Posts: 104368
You need to use the SCString data type.
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
[2015-10-21 05:58:55]
KhaosTrader - Posts: 128
Hi,

I tried this but with no luck....

sc.PlaySound("c:\\!TradeAlert_Sounds\\%s_Long.wav", EntryAlert_RootFileName.GetString(), 1);

[2015-10-21 18:18:28]
Sierra Chart Engineering - Posts: 104368
You are not using the SCString type. Also, the function is called GetChars().

It is documented here:
https://www.sierrachart.com/index.php?page=doc/doc_ACSILProgrammingConcepts.html#WorkingWithStrings
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
[2015-10-23 03:41:52]
KhaosTrader - Posts: 128
I cant access a getchars from the SCInputRef... where I define the root file name... All I can do is the getstring. So my Buffer.Format line throws an error..

Here is code...



   SCInputRef EntryAlert_RootFileName = sc.Input[18];
...
...
...

    EntryAlert_RootFileName.Name = "Root File Name for Entry Alert";
    EntryAlert_RootFileName.SetString("QCL");
..
..
..
  
    SCString Buffer;

    Buffer.Format("c:\\!TradeAlert_Sounds\\%s_Long.wav", EntryAlert_RootFileName.GetString);

sc.PlaySound("c:\\!TradeAlert_Sounds\\%s_Long.wav", Buffer.GetChars(), 1);


[2015-10-23 11:46:08]
KhaosTrader - Posts: 128
Actually, I found out a way to do it, is this an appropriate way?



    if
      (
        (sc.DownloadingHistoricalData == 0) &&
        (sc.Index > sc.ArraySize - 5)
        )
    {


      char * RootFileName = new char[std::strlen(EntryAlert_RootFileName.GetString())];
      std::strcpy(RootFileName, EntryAlert_RootFileName.GetString());
      SCString Buffer;
      Buffer.Format("c:\\!TradeAlert_Sounds\\%s_Long.wav", RootFileName);


      sc.PlaySound(Buffer.GetChars(), 1);



    }

[2015-10-23 18:09:19]
Sierra Chart Engineering - Posts: 104368
For a study input you do need to use the GetString function.


sc.PlaySound("c:\\!TradeAlert_Sounds\\%s_Long.wav", Buffer.GetChars(), 1);
The above line of code does not make sense. Specifically the use of "%s".
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
[2015-10-23 18:13:02]
Sierra Chart Engineering - Posts: 104368

char * RootFileName = new char[std::strlen(EntryAlert_RootFileName.GetString())];
You are not allocating enough space. You need to allow for the null terminator. What you defined is dangerous and will lead to instability in Sierra Chart.

In general we strongly recommend doing something like this unless you really know what you are doing.
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
[2015-10-24 06:34:20]
KhaosTrader - Posts: 128
Ok,

I tried an alternate method, is this a correct way to achieve this?



      SCString Buffer;
    

    
      Buffer = "c:\\!TradeAlert_Sounds\\";
      Buffer += EntryAlert_RootFileName.GetString();
      Buffer += "_Short.wav";

      sc.PlaySound(Buffer.GetChars(), 1);


Date Time Of Last Edit: 2015-10-24 06:48:57
[2015-10-26 09:19:16]
Sierra Chart Engineering - Posts: 104368
Yes, this will work and is safe.
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing

To post a message in this thread, you need to log in with your Sierra Chart account:

Login

Login Page - Create Account