Now, I installed a c# version 2010, create a c# windows-Forms Application with a Button and RichTextBox.
add on Program.cs:namespace WindowsFormsApplication1
{
public class ptpcam
{
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern int CreateConsole(int show, int bus, int dev);
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern int CloseConsole();
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern int IsCamConnected();
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern int IsConsoleReady();
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern string GetDllVersion();
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern string GetStdErr();
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern string GetStdOut();
[DllImport("ptpcam.dll", CharSet = CharSet.Ansi)]
public static extern int SendCommand(string stdin);
}
static class Program
{
...
code for Button1 in Form1.cs: private void button1_Click(object sender, EventArgs e)
{
bool err = false;
if (ptpcam.CreateConsole(0, 0, 0) == 1)
{
richTextBox1.AppendText("> ptpcam open\n");
int timeout = 30; //equal ~3 seconds
while (ptpcam.IsCamConnected() != 1 && timeout > 0) { timeout--; Thread.Sleep(100); }
err = (timeout == 0);
if (!err)
{
while (ptpcam.IsConsoleReady() != 1) { Thread.Sleep(100); }
string cmd = "luar get_buildinfo()";
int r_send = ptpcam.SendCommand(cmd);
richTextBox1.AppendText(string.Format("send '{0}'; result = {1}\n", cmd, r_send));
if (r_send == 1)
{
richTextBox1.AppendText("--- receive begin ---\n");
while (ptpcam.IsConsoleReady() != 1) { Thread.Sleep(100); }
string r_dll = ptpcam.GetStdOut();
richTextBox1.AppendText(r_dll + '\n');
richTextBox1.AppendText("--- receive end ---\n");
}
else richTextBox1.AppendText("!!! ptpcam: send error\n");
}
else richTextBox1.AppendText("!!! ptpcam: camera connection timeout\n");
ptpcam.CloseConsole();
richTextBox1.AppendText("> ptpcam closed\n");
}
else richTextBox1.AppendText("!!! ptpcam: open error\n");
}
output on textbox:
> ptpcam open
send 'luar get_buildinfo()'; result = 1
--- receive begin ---
script:1
1:ret:'platform sx260hs
build_date Feb 11 2013
build_number 1.2.0
build_time 05:15:58
version CHDK_DE
platsub 100b
build_revision 2567
platformid 12868
os dryos
'
--- receive end ---
> ptpcam closed
That is the mainconcept of using ptpcam.exe over ptpcam.dll.