Programming
Programming
1 Programming
Table of contents
1 Programming .............................................................................................................. 1
1.1 CASM Section Format 1 ......................................................................................... 2
1.2 CASM Section Format 2 ......................................................................................... 6
1.3 OTS Section Format ............................................................................................ 11
1.4 MDB Section Format ............................................................................................ 13
1.5 Music Finder File Format ...................................................................................... 15
1.6 Multi Pad Format ................................................................................................. 16
1.6.1 Tyros ............................................................................................................. 16
1.6.2 Other models .................................................................................................. 16
1.7 Voice File Format ................................................................................................ 17
1.7.1 Selecting a voice sample .................................................................................. 17
1.7.2 Creating a voice sample ................................................................................... 17
1.7.3 What is inside a voice sample ........................................................................... 17
1.7.4 Computer programs for modifying voices............................................................ 17
1.8 Yamaha File Extensions........................................................................................ 18
1.8.1 Style Files - sty, pst, pcs, sst, prs, bcs, fps, scp, aus ............................................ 18
1.8.2 Registration Files - rgt, reg ............................................................................... 18
1.8.3 Voice Files - org, vce, liv, swv, clv, mgv, sar, sa2, ldr, drm, swv, nlv, mgv, sfx, lsf,
env, cvn/d, cwn/d, uvn/d/i, tvn/d/i, vv1, cv1, vli, t2e ....................................................... 18
1.8.4 Yamaha Expansion Packs (YEPs) - yep, ppi, ppf, cpi, cpf....................................... 18
1.8.5 Music Finder Files - mfd ................................................................................... 18
1.8.6 MIDI and Audio Files - mid, wav, mp3 ................................................................ 19
1.8.7 Multipad Files - pad, pd2 .................................................................................. 19
1.8.8 License files - n25, n26, n27 ............................................................................. 19
1.8.9 Play List Files – tsv .......................................................................................... 19
1.8.10 Misc. files - usr, bup ........................................................................................ 19
1.8.11 Outdated files - ots, vic, eff .............................................................................. 19
1.9 Yamaha Internal Data .......................................................................................... 19
1.9.1 Multi Pad Numbers .......................................................................................... 19
1.9.2 Harmony/Arpeggio Numbers ............................................................................. 20
1.9.3 Style Numbers ................................................................................................ 21
1.10 HP_MIDIFILE.dll in C# and VB.Net ........................................................................ 22
1.10.1 C# sample code for Form1 ............................................................................... 22
1.10.2 VB.Net sample code for Form1 .......................................................................... 23
3.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
G 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
F# 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
F 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
E 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
4.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
Eb 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
D 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
C# 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
C 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Example: 0E A3 means that C C# F G A Bb and B
plays. When other notes are pressed the
accompaniment is muted.
6.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
7 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
dim7 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
dim 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
m7M(9) 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
7.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
mM7 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
m7(11) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
m7(9) 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
m(9) 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
8.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
m7b5 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
min7 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
min6 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
min 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
9.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
aug 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
6(9) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
M7(9) 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
(9) 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
10.digit= F E D C B A 9 8 7 6 5 4 3 2 1 0
M7#11 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
Maj7 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
Maj6 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
Maj 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Example: 03 FF EF FF F8 means that when playing a
Maj chord or a 7sus4 chord the accompaniment is
muted.
... and now over from line 29 for each channel with defined values in line 32 in the CSEG section
... and now over from line 02 for each CSEG section in CASM
channel 9 - 16).
12 x Editable 00 - 01 01 Channel Read Only - 00 Channel Editable
13 x Note Mute 00 - 0F Notes to play (0 = not play)
1. digit 1.digit = 0 (always)
2. digit
2.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
14 x Note Mute 00 - FF B 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
Bb 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
3. digit
A 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
4. digit G# 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
3.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
G 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
F# 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
F 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
E 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
4.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
Eb 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
D 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
C# 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
C 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Example: 0E A3 means that C C# F G A Bb and B
plays. When other notes are pressed the
accompaniment is muted.
15 x Chord Mute 00 - 07 Chords to play (0 = not play)
1. digit 1.digit = 0 (always)
2. digit
2.digit = 3 2 1 0 add 4 if auto start
16 x Chord Mute 00 - FF 1+2+5 1 1 0 0
sus4 1 0 1 0
3. digit
4. digit 3.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
1+5 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
17 x Chord Mute 00 - FF 1+8 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
5. digit 7aug 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
6. digit M7aug 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
6.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
7 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
dim7 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
dim 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
m7M(9) 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
7.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
mM7 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
m7(11) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
m7(9) 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
m(9) 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
8.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
m7b5 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
min7 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
min6 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
min 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
9.digit = F E D C B A 9 8 7 6 5 4 3 2 1 0
aug 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
6(9) 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
M7(9) 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
(9) 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
10.digit= F E D C B A 9 8 7 6 5 4 3 2 1 0
M7#11 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
Maj7 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
Maj6 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
Maj 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Example: 03 FF EF FF F8 means that when playing
a Maj chord or a 7sus4 chord the accompaniment is
muted.
20 x Source Chord 00 - 0B These settings determine the original key of the
source pattern (i.e. the key used when recording
21 x Chord Type 00 - 21
the pattern). The default, CM7 (the source root is
"C" and the source chord type is "M7"), is
automatically selected whenever the preset data is
deleted prior to recording a new style, regardless of
the source root and chord included in the preset
data.
Valid Chord Types are: Maj, Maj6, Maj7, M7#11,
Madd9, M7(9), M6(9), aug, m, m6, m7, m7b5,
m(9), m7(9), m7(11), mM7, mM7(9), dim, dim7, 7,
7sus, 7b5, 7(9), 7(#11), 7(13), 7(b9), 7(b13),
7(#9), M7aug, 7aug, 1+8, 1+5, sus4, 1+2+5
22 x Low / middle 00 - 7F Specifies the lowest MIDI note value which is part
limit of the "middle note section". All notes below this
note belong to the "low notes section".
If the value of this byte is 0, then the data in the
"low notes section" is not used.
23 x Middle / high 00 - 7F Specifies the highest MIDI note value which is part
limit of the "middle note section". All notes above this
note belong to the "high notes section".
If the value of this byte is 7F, then the data in the
"high notes section" is not used.
The following 6 lines are repeated for low, middle and high notes sections.
24 x Note 00 - 02 NTR specify the transposition rule to be used by the
Transposition transposition table. Three settings are available:
Rule ROOT TRANS (00): When transposed the pitch
relationship between notes is maintained. For
example, the notes C3, E3, and G3 in the key of C
will become F3, A3, and C4 when transposed to F.
Use this setting for parts that contain melodic lines.
ROOT FIXED (01): The note is kept as close as
possible to the previous note range. For example,
the notes C3, E3, and G3 in the key of C will
become C3, F3, and A3 when transposed to F. Use
this setting for chordal parts.
GUITAR (02): This is exclusively for transposing
guitar accompaniment. Notes are transposed to
approximate the chords played with natural guitar
fingering.
25 x Note Bass "off": NTT specify the note transposition table to be used
Transposition 00 - 0A for source pattern transposition. The following table
Table Bass "on": types are available.
BYPASS (00 - 80): No transposition.
The OTS chunk identifier "OTSc" and then 4 bytes giving the length of the entire section, not
including the 4 identifier bytes and the 4 length bytes.
Next comes a "MTrk" identifier. This is a MIDI track identifier; and later on will follow 3 more
"MTrk" identifiers.
The first MIDI Track holds the "OTS 1" information; the second MIDI Track holds the "OTS 2"
information; and so on.
This means that the entire OTS section is so to speak a "4 Track MIDI File with an abnormal
header".
In the MIDI Tracks we will find some "normal" MIDI events and a lot of "normal" SysEx messages
defining the voices in the OTS set-up.
These "normalities" are found in the keyboard data sheet. SysEx of this form: "F0 43 10 4C xx xx
xx yy F7" are normal.
After stripping a OTS section for these "normalities" there will remain some OTS specific data,
which all are SysEx messages.
These messages have this form: "F0 43 73 01 5z xx xx xx yy .. yy F7", where
• "z" is 0 or 1
• "xx xx xx" is address. The second xx block is 00 -> 03 = channel (1 -> 4) - Right 1; Right 2;
Right 3 and Left.
• "yy .. yy" are actual data value - one or more bytes
Notice:
The information in this page is not complete; and errors might occur.
Yamaha never tells us about their file formats!
Please contact me if you have information about the "?" fields in the table.
Section SysEx message Data Byte Value(s) Function
Header F0 43 73 01 50 05 01 01 2A F7 ?
F0 43 73 01 50 05 01 02 32 F7 ?
Part Right
F0 43 73 01 50 08 00 00 yy F7 00 = 0 or 7F = 127 part off/on
1
F0 43 73 01 50 08 00 04 yy F7 00 = 0 to 7F = 127 voice set volume *)
F0 43 73 01 50 08 00 03 yy F7 See table below Octave Set *)
Part Right
F0 43 73 01 50 08 01 00 yy F7 00 = 0 or 7F = 127 part off/on
2
F0 43 73 01 50 08 01 04 yy F7 00 = 0 to 7F = 127 voice set volume *)
F0 43 73 01 50 08 01 03 yy F7 See table below Octave set *)
Part Right
F0 43 73 01 50 08 02 00 yy F7 00 = 0 or 7F = 127 part off/on
3
F0 43 73 01 50 08 02 04 yy F7 00 = 0 to 7F = 127 voice set volume *)
F0 43 73 01 50 08 02 03 yy F7 See table below Octave set *)
Part Left F0 43 73 01 50 08 03 00 yy F7 00 = 0 or 7F = 127 part off/on
F0 43 73 01 50 08 03 04 yy F7 00 = 0 to 7F = 127 voice set volume *)
F0 43 73 01 50 08 03 03 yy F7 See table below Octave set *)
Part Right F0 43 73 01 51 08 00 11 yy yy DSP Variation
Check Manual
1 yy F7 Parameter *)
F0 43 73 01 50 08 00 08 yy F7 00 = 0 or 7F = 127 DSP off/on
F0 43 73 01 50 08 00 01 yy F7 00 = 0 or 7F = 127 DSP Variation off/on *)
Part Right F0 43 73 01 51 08 01 11 yy yy DSP Variation
Check Manual
2 yy F7 Parameter *)
F0 43 73 01 50 08 01 08 yy F7 00 = 0 or 7F = 127 DSP off/on
F0 43 73 01 50 08 01 01 yy F7 00 = 0 or 7F = 127 DSP Variation off/on *)
Part Right F0 43 73 01 51 08 02 11 yy yy DSP Variation
Check Manual
3 yy F7 Parameter *)
F0 43 73 01 50 08 02 08 yy F7 00 = 0 or 7F = 127 DSP off/on
F0 43 73 01 50 08 02 01 yy F7 00 = 0 or 7F = 127 DSP Variation off/on *)
F0 43 73 01 51 08 03 11 yy yy DSP Variation
Part Left Check Manual
yy F7 Parameter *)
F0 43 73 01 50 08 03 08 yy F7 00 = 0 or 7F = 127 DSP off/on
At position 12 in the first line comes the 4 byte chunk identifier = "FNRc"
Then the 4 byte length (red underlined) of the entire MDB chunk - not including the chunk
identifier and this 4 "length" bytes.
In this case: "00 00 01 6A" (hex) = (0 * 256 * 256 * 256) + (0 * 256 * 256) + (1 * 256) + 106 =
362 bytes.
Next is the record identifier "FNRP" (green underlined) and the length of the record (blue
underlined) - not including the record identifier and this 4 "length" bytes.
The record length is 4D (hex) = 77 (dec) bytes.
Then 3 bytes "0C 0B E1" (orange underlined) which defines the tempo calculated as:
Tempo = 60000000 / (1.byte * 256 * 256 + 2.byte * 256 + 3.byte)
In this case - when remembering to convert the hexadecimal values to decimal - the result is:
Tempo = 60000000 / (12 * 256 * 256 + 11 * 256 + 225) = 60000000 / 789473 = 76
Next 2 bytes "04 04" (black underlined) which defines the Time Signature. In this case 4/4 - no
calculations required...!
Next 8 bytes "4D 6E 61 6D 00 00 00 0F" (yellow underlined) which is the Music Name (Song Title)
identifier "Mnam" and the length of Music Name. In this case "0F" (hex) = 15 (dec)
Next the 15 bytes defining the song title = "As Time Goes By".
In a similar way comes
• Genre (identifier "Gnam") - violet underlined. The record reads: "All Time Hits"
• Keyword1 (identifier "Kwd1") - light green underlined. The record reads: "40,movie,sam"
• Keyword2 (identifier "Kwd2") - pink underlined. The record reads: ""
Notice that there is no data in Keyword2 (data length = 0).
This file has only ONE record. If the file was a multi record file, the following records are added at
the end of this file.
The header is the first 36 bytes. Yamaha has used several formats, some keyboard specific and
some of the "NetCommon" type.
As the format has never been published the idea about this has never been fully revealed. However
most keyboards read Music Finder files with all headers.
The last two bytes in the header (index 34 and 35 in the first black square) are the total number of
records in the file. In this case this number = 1, which is written 00 01.
Now comes the record(s). Each record is 92 bytes long.
# of bytes Function In this file Marking
2 Two blanks 00 00 None
2 Record serial number (0-indexed) *) 00 00 Black square
2 Internal style number **) 1C 00 (= 7168 in dec.) Green underline
2 Time signature 03 04 (= 3/4 time) Red underline
2 Tempo 00 3E (= 62 in dec.) Blue underline
1 Fav, S1 and S2 ***) 00 Black square
32 Song title 41 6D 61... (Ama...) Yellow underline
16 Genre 52 26 42... (R&B...) Brown underline
32 Keywords 68 79 6D... (hym...) Gray underline
1 Intro/Next setting ****) 24 (= 36 in dec.) Black square
*) if there were a record more in the file, the serial number of this record would read 00 01
**) to get "Internal Style Number" please read here. Sorry there is no easier way!
***) "Fav" = Favorites (value = 1); "S1" = Search 1 (value = 2); and "S2" = Search 2 (value =
4). Values are added. E.g. value = 5 means: Favorites = Yes and Search 2 = Yes
****) "Intro" = Which intro will be played at start; "Next" = Which part will follow. Values are
added.
Intro values Next values
Off = 0 * 16 Off = 0
Intro 1 = 1 * 16 Intro 1 = 1
Intro 2 = 2 * 16 Intro 2 = 2
Intro 3 = 3 * 16 Intro 3 = 3
Main A = 4 * 16 Main A = 4
Main B = 5 * 16 Main B = 5
Main C = 6 * 16 Main C = 6
Main D = 7 * 16 Main D = 7
Ending A = 8 * 16 Ending A = 8
Ending B = 9 * 16 Ending B = 9
Ending C = 10 * 16 Ending C = 10
E.g. value = 24 (hex) = 36 (dec) = 2 * 16 + 4 means: Play "Intro 2" and continue with "Main A".
In the Music Finder File Manager software at
http://www.jososoft.dk/yamaha/software/mffm/index.htm the sample file will look like this:
Notice that the Internal Style Number is shown as <7168>. This means that the selected keyboard
model (PSR 1500 - see top line in image above) does not recognize the style defined in the Music
Finder record.
1.6.1 Tyros
The first track (Track 0) contains 10 MIDI Text events ALL placed at MIDI tick 0.
• 1. text event has a length of 6:
"CMxxxx", where xxxx corresponds to Chord Match value in Multi Pad 1, 2, 3, and 4.
Values for x are: 0 = No and 1 = Yes
• 2. text event has a length of 6:
"RPxxxx", where xxxx corresponds to Repeat value in Multi Pad 1, 2, 3, and 4.
Values for x are: 0 = No and 1 = Yes
• 3. - 6. text event has a length of 52:
This holds the Multi Pad name and number, e.g. "NyHipHop1 yxxxx...",
where y is the Multi Pad number, e.g. "N2HipHop1 2 ....". Rests of the 52 bytes are blanks.
• 7. - 10. text event has a length of 6:
This holds information about the image attached to the MultiPad.
E.g. "IyS375": "I" indicates image; "y" is the Multi Pad number; and "S375" is a reference to the
image.
The following tracks (Track 1 - 4) are normal MIDI tracks with a length of one measure.
• The tracks contain voice definitions and note events.
• In Track 1 channel 1 is used; in Track 2 channel 2 is used; and so on.
Notice:
For audition of voice modifications always use your keyboard. Hardly any computer sound card are
as good as your keyboard's sound card.
1.8.1 Style Files - sty, pst, pcs, sst, prs, bcs, fps, scp, aus
Styles are the main component for music reproduction in arranger keyboards.
Style files holds MIDI data and some non-MIDI data. NB: "aus" styles are audio styles.
Style files had some years ago always sty file extension. Now a number of files extensions are
used: pst (pianist); pcs (piano combo); sst (session); prs (pro); bcs (basic); fps (free play) and
scp (dj style).
Beside the built-in styles additional style files can be loaded into most models. But due to some
changes in the style file format during the years, styles might need conversion for use in
smaller/older models.
1.8.3 Voice Files - org, vce, liv, swv, clv, mgv, sar, sa2, ldr, drm, swv, nlv,
mgv, sfx, lsf, env, cvn/d, cwn/d, uvn/d/i, tvn/d/i, vv1, cv1, vli, t2e
There are two different ways of changing the voices: Modifying the built-in voices or loading new
voice samples.
The built-in voices can be modified, and may also work on other models. The new voice settings
are saved to a file. File extensions are org; vce; liv; swv; clv; mgv; sar; ldr; and drm. Data
format is MIDI.
When a built-in voice in the keyboard is loaded, the new settings are read and the voice is changed
accordingly.
The latest high end arrangers, the Genos and Tyros models, will load 'real' new voices in the
keyboard firmware. These voices are in files with cvn/cvd; uvn/uvd or tvn/tvd file extensions
("?vd" for drum kits); and these are not interchangeable between models.
1.8.4 Yamaha Expansion Packs (YEPs) - yep, ppi, ppf, cpi, cpf
A Yamaha Expansion Pack is a package which adds more content (voices and styles) to the
keyboard.
The voices and styles are merged into a file, having a yep or ppi extension.
Some YEPs contain Registrations and/or MultiPads too. These data are not included in the "yep/ppi"
file.
The file format is "Tabulator Seperated Values", which make the files editable in Microsoft Excel
software.
S775; PSR S670; PSR A5000; PSR A3000; PSR A2000; PSR A350; and PSR OR700 keyboards.
(Note: The internal Multi Pad Numbers are not the numbers in the manual.)
To get the internal numbers, go to the MultiPad data page in your Manual. You will see something
like:
using System.Runtime.InteropServices;
namespace HP_test
{
public class Form1 : System.Windows.Forms.Form
{
[DllImport("HP_midifile.dll",
EntryPoint="?HP_Init@@YAPAVMIDIFile@@XZ")]
public static extern int HP_Init();
[DllImport("HP_midifile.dll",
EntryPoint="?HP_Load@@YAIPAVMIDIFile@@PBD@Z")]
public static extern int HP_Load(int i, String s);
[DllImport("HP_midifile.dll",
EntryPoint="?HP_Save@@YAIPAVMIDIFile@@PBDH@Z")]
public static extern int HP_Save(int i, String s, int x);
[DllImport("HP_midifile.dll",
EntryPoint="?HP_Free@@YAIPAVMIDIFile@@@Z")]
public static extern int HP_Free(int i);
Due to a 64 bit vs. 32 bit conflict open "Projects" -> "Properties" window in Visual Studio and set
the Target CPU as x86. You will get some warnings while compiling!
Imports System.Runtime.InteropServices
End Class
Due to a 64 bit vs. 32 bit conflict open "Projects" -> "Properties" window in Visual Studio and set
the Target CPU as x86. You will get some warnings while compiling!