Avatar billede stois Nybegynder
17. december 2007 - 14:38 Der er 6 kommentarer

External component has thrown an exception

Jeg har en DLL som jeg skal snakke igennem, men jeg får fejl hele tiden =(

----------------------------------------
Her er DllImport'en:
[DllImport("homeputer.dll",
  EntryPoint = "homeputer_GetObjIdx",
  CharSet = CharSet.Unicode,
  ExactSpelling = true,
  CallingConvention = CallingConvention.StdCall)]
public static extern bool homeputer_GetObjIdx(
  int Index,
  ref string ObjectName,
  ref string ObjectValue);

----------------------------------------

Her er den Exception jeg får:
System.Runtime.InteropServices.SEHException: External component has thrown an exception.
  at ALMAX_TEST_2.Homeputer.homeputer_GetObjIdx(Int32 Index, String& ObjectName, String& ObjectValue)
  at ALMAX_TEST_2.MainWindow.WndProc(Message& Homeputer_Message) in T:\Program\ALMAX TEST 2\ALMAX TEST 2\MainWindow.cs:line 69

----------------------------------------

Her er min try catch med fejlen i:
try
{
  string ObjectName = null;
  string ObjectValue = null;
  Homeputer.homeputer_GetObjIdx(
    Homeputer_Message.WParam.ToInt32(),
    ref ObjectName,
    ref ObjectValue);
  lbl_Windows_Handle_Info.Text += "\nObject Call Successful" +
    "\n Object Returned:" +
    "\n  Name:  " + ObjectName +
    "\n  Value: " + ObjectValue;
}
catch (SEHException e)
{
  lbl_Windows_Handle_Info.Text += "\nObject calling error!";
  txtbx_Exception.Text = "Exception:\n" + e.ToString();
}

----------------------------------------

Se også hvad jeg har arbejdet i før:
http://www.eksperten.dk/spm/810754
http://www.eksperten.dk/spm/809949

Hvad er det jeg gør galt?
Avatar billede stois Nybegynder
17. december 2007 - 14:44 #1
Fejlen ligger i denne linie:
Homeputer.homeputer_GetObjIdx(Homeputer_Message.WParam.ToInt32(), ref ObjectName,
    ref ObjectValue);
Avatar billede nielle Nybegynder
17. december 2007 - 15:00 #2
Har den excption ikke en InnerException (eller noget i denen stil) som du kan kigge i? Den bør i hvcert fald et eller andet sted indikere hvad den oprindelige exception var for en.
Avatar billede stois Nybegynder
17. december 2007 - 15:26 #3
Jeg ved ikke hvordan jeg kan få visual studio til er viser den bagved liggende exception...
Avatar billede nielle Nybegynder
17. december 2007 - 18:05 #4
Du catcher den smidte exception og så ser du hvad den har pakket ind:

try
{
    ...
}
catch (System.Runtime.InteropServices.SEHException ex)
{
    MessageBox.Show(ex.InnerExcepotion.ToString());
}

Noget i denne stil... Nu ved jeg ikke hvilke propeties en SEHException exeption har, så jeg skal ikke sige om lige den viste kode vil kompilere.
Avatar billede stois Nybegynder
18. december 2007 - 00:43 #5
ændrede min try catch til:

try
{
  string ObjectName = new string(' ', 254);        <--- 1
  string ObjectValue = new string(' ', 254);      <--- 2
  Homeputer.homeputer_GetObjIdx(Homeputer_Message.WParam.ToInt32(),
    ref ObjectName,
    ref ObjectValue);
  lbl_Windows_Handle_Info.Text += "\nObject Call Successful" +
    "\n Object Returned:" +
    "\n  Name:  " + ObjectName +
    "\n  Value: " + ObjectValue;
}
catch (SEHException e)
{
  lbl_Windows_Handle_Info.Text += "\nObject calling error!";
  txtbx_Exception.Text = "Exception:\n" + e.ToString()
    + "\n\nInner Exception:\n" + e.InnerException.ToString(); <--- 3
}

1 og 2: forslag fra et andet spørgsmål, har ikke noget med det her at gøre...

3: har tilføjet InnerException efter den forrige meddelese.

efter ændringerne fik jeg den her exception:

System.NullReferenceException: Object reference not set to an instance of an object.
  at ALMAX_TEST_2.MainWindow.WndProc(Message& Homeputer_Message) in T:\Program\ALMAX TEST 2\ALMAX TEST 2\MainWindow.cs:line 80
  at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Avatar billede nielle Nybegynder
18. december 2007 - 19:20 #6
Normalt plejer man at kalde med en StringBuilder frem for en string. Ud over dette har jeg desværre ikke nogen bud. :^|
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester