Нужен интерфейс к C ++ DLL - PullRequest
2 голосов
/ 05 мая 2010

Мне нужно вызвать C ++ API из C #. Я был в состоянии вызвать API, но параметры char [], похоже, неправильно сортируются. Вот подпись C ++:

Create2ptModel(double modelPowers[2], 
               double modelDacs[2], 
               int pclRange[2],
               double targetPowers[32], 
               double *dacAdjustFactor,
               unsigned short powerRampFactors[32], 
               BOOL bPCLDacAdjusted[32],
               char calibrationModel[32],
               char errMsg[1024])

и вот как я пытаюсь вызвать его из C #

[DllImport("AlgorithmsLib.dll", EntryPoint = "_Create2ptModel@36", 
 ExactSpelling = true, CallingConvention = CallingConvention.StdCall, 
 CharSet = CharSet.Auto)]
private static extern AlgorithmStatus Create2ptModel(
    double[] modelPowers, 
    double[] modelDacs, 
    int[] pclRange, 
    double[] targetPowers, 
    ref double dacAdjustFactor, 
    ushort[] powerRampFactors, 
    bool[] bPCLDacAdjusted, 
    /**/char[] calibrationModel, 
    char[] errMsg/**/);

Есть идеи о том, как я могу сделать это правильно? Заранее спасибо!

1 Ответ

3 голосов
/ 05 мая 2010
  1. Не используйте CharSet.Auto Вы знаете набор символов библиотеки, используйте это. Если вы дадите машине угадать, она может угадать неправильно.

  2. Являются ли эти char[] параметры пустыми? Это входы или выходы? Если они являются входами с нулевым окончанием, просто используйте string вместо char[].

...