-1
Я не могу правильно передать правильные аргументы. Я получаюMarshaling er Pinvoke Головная боль
"Неверное имя Синтаксический размер буфера" ошибка
Lotus Notes функция dname.h
STATUS LNPUBLIC DNParse(
DWORD Flags,
const char far *TemplateName,
const char far *InName,
DN_COMPONENTS far *Comp,
WORD CompSize);
структура ниже
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct DN_COMPONENTS
{
public int Flags;
[MarshalAs(UnmanagedType.LPWStr)]
public string C;
public short OLength;
[MarshalAs(UnmanagedType.LPWStr)]
public string O;
[MarshalAs(UnmanagedType.LPWStr)]
public string CN;
};
C#
Ниже то, что я попробовал
Status sts = 0;
StringBuilder szServer = new StringBuilder(names.MAXUSERNAME);
string notUsedString = null;
DWORD notUsed = 0;
dname.DN_COMPONENTS xdDC = new DN_COMPONENTS();
sts = nnotesDLL.SECKFMGetUserName(szServer);
//IntPtr structPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(dname.DN_COMPONENTS)));
//UInt16 num = Convert.ToUInt16(Marshal.SizeOf(structPtr));
//WORD num = Convert.ToUInt16(Marshal.SizeOf(structPtr));
int num = Marshal.SizeOf(typeof(DN_COMPONENTS));
IntPtr structPtr = Marshal.AllocCoTaskMem(num);
sts = nnotesDLL.DNParse(notUsed, notUsedString, szServer, structPtr, (UInt32)num);
this.xdDC = (dname.DN_COMPONENTS)Marshal.PtrToStructure(structPtr, typeof(dname.DN_COMPONENTS));
xdDC.CN = Decode(Marshal.ReadIntPtr(structPtr), ushort.MaxValue);
///CN=SomeFirstName SomeLastName/OU=Corp/O=test
Ищу "SomeFirstName SomeLastName"
[DllImport("nnotes.DLL", CallingConvention = CallingConvention.StdCall)]
public unsafe static extern Status DNParse(DWORD notUsed, string notUsedString, StringBuilder InName, IntPtr structPtr, UInt32 structPtrSizeOf);
Я попробовал все варианты от исх всем, ссылка на структуру, изменен на строки, INT, UINT Ничего !!!
Помощь ...
Что я ищу, CN = SomeFirstName SomeLastName/OU = Corp/O = тест
Вы не указали собственное объявление структуры. Почему вы выбрали Pack = 1? Во всяком случае, то, что вы пытаетесь, не может работать. Вам нужно объявить строки как «IntPtr» и использовать «Marshal.PtrToStringAnsi», чтобы их прочитать. –
http://www-12.lotus.com/ldd/doc/domino_notes/9.0/api90ref.nsf/852561bd0045e8e785255b3c005a57bb/24d9907b9ecc4fff8525667700438cc1?OpenDocument&Highlight=0,DN_COMPONENTS – user2697657
Смотрите ссылку на структуру родной – user2697657