Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

AV bei umwandlung PAnsiChar nach C#

  Alt 2. Jun 2016, 10:14
Fehler!
Zitat:
System.AccessViolationException was unhandled
HResult=-2147467261
Message=Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Der Fehler tritt nur in CSharp auf.
C#
Code:
  [Serializable, StructLayout(LayoutKind.Sequential)]
  public sealed class BASSVIS_INFO
  {
    [MarshalAs(UnmanagedType.LPStr)]
    public string SongTitle = string.Empty;
    [MarshalAs(UnmanagedType.LPStr)]
    public string SongFile = string.Empty;
    public int Position;
    public int PlaylistPos = 1;
    public int PlaylistLen = 1;
    public int SampleRate = 0xac44;
    public int BitRate = 0x100;
    public int Duration;
    public int Channels = 2;
    public BASSVIS_INFO(string songtitle, string filename)
    {
    }
  }
Code:
//BASSVIS_SetInfo
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_SetInfo", CharSet = CharSet.Auto)]
public static extern bool BASSVIS_SetInfo(BASSVIS_PARAM param, BASSVIS_INFO info);
Code:
if ((_visParam.VisHandle != 0) & (BassVisTest.MainWindow._streamFile != ""))
  BassVis.BASSVIS_SetInfo(_visParam, _mediaInfo);
Delphi-Quellcode:
procedure TBassWMPVisAPI.WMPVIS_SetMediaInfo(Channels: integer; SampleRate: integer;
  Title: PAnsiChar; FileName: PAnsiChar); stdcall;
var
  WMPMedia: IWMPMedia;
begin
  if RenderFromDevice then
    Title := 'BassVis - BrewIdeas©Emil Weiss';

  if OldMedia <> WideString(FileName) then
  begin
    if FileExists(string(FileName)) then
    begin
      OldMedia := WideString(FileName);

      BassWMPVis1.FStreamInfo.SampleRate := SampleRate;
      BassWMPVis1.FStreamInfo.Channels := Channels;
      BassWMPVis1.FStreamInfo.Title := WideString(Title);
      BassWMPVis1.FStreamInfo.FileName := FileName;

      WMPHelper.MediaInfo(Channels, SampleRate, WideString(Title));
Liegt hier ein Konvertierungs Problem zwischen PAnsiChar und WideString vor?
Oder woher kommt der Fehler.

Es kracht hier..
Delphi-Quellcode:
function TWMPHelper.NotifyNewMedia(pMedia: IWMPMedia): Bool;
begin
  Result := False;
  try
    EnterCriticalSection(CritSect);
    if Assigned(_IWmpEffects2) then
      if _IWmpEffects2.NotifyNewMedia(pMedia) = S_OK then //<<<<< Problem nur in C#
        Result := True;
  finally
    LeaveCriticalSection(CritSect);
  end;

end;
gruss

Geändert von EWeiss ( 2. Jun 2016 um 10:32 Uhr)
  Mit Zitat antworten Zitat