2016-01-26 5 views
0

У меня есть Business Intelligence -> Проект служб интеграции, где у меня есть пакеты SSIS -> Задача скрипта. Мне нужно позвонить из неуправляемого кода скрипта, используя DllImport. Поскольку я не знаю, где код для задачи скрипта хранится во время выполнения, я не могу позвонить в свою неуправляемую dll.Вызов неуправляемого кода из задачи сценария SSIS

Пример кода ниже задачи сценария:

using System; // Console 
using System.Runtime.InteropServices; // DllImport 

class App 
{ 
    [DllImport("lib.dll", CallingConvention = CallingConvention.Cdecl)] 
extern static int next(int n); 

    static void Main() 
    { 
     Console.WriteLine(next(0)); 
     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
} 

Вы можете узнать больше о Task Script here

Вопрос: Как позвонить из неуправляемого кода SSRS Пакет -> Задача сценария?

ответ

0

Убедитесь, чтобы скопировать C/C DLL ++ в "C: \ Program Files \ Microsoft SQL Server \ 120 \ DTS \ Binn", который будет загружен, когда управляемый код вызывает DllImport

ПРИМЕЧАНИЕ: 120 зависит от версии, обязательно скопируйте ее в правильную версию.

1

SSIS не загрузит DLL по местоположению, даже управляемые dll's. Вы должны GAC их, http://microsoft-ssis.blogspot.com/2011/05/referencing-custom-assembly-inside.html. Поэтому я ожидаю, что вам придется COM зарегистрировать вашу неуправляемую dll, https://technet.microsoft.com/en-us/library/bb490985.aspx.

+0

Я получаю следующую ошибку: модуль «"% 1 "" был загружен, но точка входа% 2 не найдена. \ N \ nУбедитесь, что ""% 1 "" является допустимым DLL или OCX-файлом и затем повторите попытку BTW: Я пытаюсь использовать http://www.cryptopp.com/ dll – Farukh

+0

, так что это тоже не действительный COM-объект, поэтому вам придется загружать его динамически из местоположения. извините, у меня такое чувство, что вы не найдете прямого решения для этого. Я думаю, вам, вероятно, нужно написать сильную именованную GAC'd. Net dll для работы в качестве адаптера, чтобы динамически загружать dll из местоположения. Я не знаю, как вы можете легко искать в Интернете решение. Пакеты SSIS обычно запускаются из System32 из того, что я помню как рабочий каталог по умолчанию. –

+0

Я предполагаю, что у вас есть веская причина для вызова этой библиотеки для шифрования, а не для использования встроенных библиотек .Net? –